示例#1
0
        private void buttonUSBStart_Click(object sender, EventArgs e)
        {
            string output_folder = textBox2.Text;
            string file_name     = textBox5.Text;

            string A_file   = output_folder + "\\" + file_name + "_A.csv";
            string P_file   = output_folder + "\\" + file_name + "_P.csv";
            string M_file   = output_folder + "\\" + file_name + "_M.csv";
            string G_file   = output_folder + "\\" + file_name + "_G.nmea";
            string UBX_file = output_folder + "\\" + file_name + ".ubx";

            // ファイルが既に存在していたら警告を出す
            if (File.Exists(A_file) || File.Exists(P_file) ||
                File.Exists(M_file) || File.Exists(G_file) || File.Exists(UBX_file))
            {
                DialogResult res = MessageBox.Show("Are you sure you want to overwrite the files?",
                                                   "Overwrite save",
                                                   MessageBoxButtons.OKCancel,
                                                   MessageBoxIcon.Exclamation);

                if (res == DialogResult.Cancel)
                {
                    MessageBox.Show("Abort overwrite save", "Information",
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    return;
                }
            }

            // COMポートが接続されていなかったら警告を出す
            if (disconnectTokenSource == null)
            {
                DialogResult res = MessageBox.Show("Port has NOT been opened yet. Continue?", "Port check",
                                                   MessageBoxButtons.OKCancel,
                                                   MessageBoxIcon.Exclamation);
                if (res == DialogResult.Cancel)
                {
                    MessageBox.Show("Aborted", "Information",
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    return;
                }
            }

            var tokenSource = new CancellationTokenSource();
            var token       = tokenSource.Token;

            StreamWriter csv_A_orig = csv_A, csv_A_usb = new StreamWriter(A_file, true);
            StreamWriter csv_M_orig = csv_M, csv_M_usb = new StreamWriter(M_file, true);
            StreamWriter csv_P_orig = csv_P, csv_P_usb = new StreamWriter(P_file, true);;
            StreamWriter nmea_G_orig = nmea_G, nmea_G_usb = new StreamWriter(G_file, true);;
            BinaryWriter ubx_G_orig = ubx_G, ubx_G_usb = new BinaryWriter(new FileStream(UBX_file, FileMode.Append, FileAccess.Write));;

            SylphidePages.WriteCSVHeaderA(csv_A_usb);
            SylphidePages.WriteCSVHeaderM(csv_M_usb);
            SylphidePages.WriteCSVHeaderP(csv_P_usb);

            // バックグラウンド処理
            loggingTask = Task.Factory.StartNew(() =>
            {
                lock (fileSemaphore)
                {
                    csv_A  = csv_A_usb;
                    csv_M  = csv_M_usb;
                    csv_P  = csv_P_usb;
                    nmea_G = nmea_G_usb;
                    ubx_G  = ubx_G_usb;
                }

                while (true)
                {
                    token.ThrowIfCancellationRequested();
                }
            }, token).ContinueWith(t =>
            {
                lock (fileSemaphore)
                {
                    csv_A  = csv_A_orig;
                    csv_M  = csv_M_orig;
                    csv_P  = csv_P_orig;
                    nmea_G = nmea_G_orig;
                    ubx_G  = ubx_G_orig;
                }

                csv_A_usb.Close();
                csv_M_usb.Close();
                csv_P_usb.Close();
                nmea_G_usb.Close();
                ubx_G_usb.Close();

                closeLogTokenSource.Dispose();
                closeLogTokenSource = null;
                loggingTask         = null;

                if (closing)
                {
                    return;
                }
                Invoke((MethodInvoker)(() =>
                {
                    buttonUSBBrowse.Enabled = true;
                    buttonUSBStart.Enabled = true;
                    textBox5.Enabled = true;
                    buttonUSBStop.Enabled = false;
                }));
            });

            buttonUSBStart.Enabled  = false;
            buttonUSBStop.Enabled   = true;
            textBox5.Enabled        = false;
            buttonUSBBrowse.Enabled = false;

            closeLogTokenSource = tokenSource;
        }
示例#2
0
        private void buttonSDConvert_Click(object sender, EventArgs e)
        {
            string input_file    = textBox3.Text;
            string output_folder = textBox1.Text;
            string file_name     = textBox4.Text;

            string A_file   = output_folder + "\\" + file_name + "_A.csv";
            string P_file   = output_folder + "\\" + file_name + "_P.csv";
            string M_file   = output_folder + "\\" + file_name + "_M.csv";
            string G_file   = output_folder + "\\" + file_name + "_G.nmea";
            string UBX_file = output_folder + "\\" + file_name + ".ubx";

            // ファイルが既に存在していたら警告を出す。キャンセルボタンを押すとメソッドを抜ける
            if (File.Exists(A_file) || File.Exists(P_file) ||
                File.Exists(M_file) || File.Exists(G_file) || File.Exists(UBX_file))
            {
                DialogResult res = MessageBox.Show("Are you sure you want to overwrite the files?",
                                                   "Overwrite save",
                                                   MessageBoxButtons.OKCancel,
                                                   MessageBoxIcon.Exclamation);

                if (res == DialogResult.Cancel)
                {
                    MessageBox.Show("Abort overwrite save", "Information",
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    return;
                }
            }

            BinaryReader br = new BinaryReader(File.OpenRead(input_file));

            StreamWriter csv_A_sd  = new StreamWriter(A_file, false);
            StreamWriter csv_P_sd  = new StreamWriter(P_file, false);
            StreamWriter csv_M_sd  = new StreamWriter(M_file, false);
            StreamWriter nmea_G_sd = new StreamWriter(G_file, false);
            BinaryWriter ubx_G_sd  = new BinaryWriter(File.OpenWrite(UBX_file));

            SylphidePages.WriteCSVHeaderA(csv_A_sd);
            SylphidePages.WriteCSVHeaderM(csv_M_sd);
            SylphidePages.WriteCSVHeaderP(csv_P_sd);

            var tokenSource = new CancellationTokenSource();
            var token       = tokenSource.Token;

            convertingTask = Task.Factory.StartNew(() =>
            {
                SylphidePages pages_sd = new SylphidePages();

                while (true)
                {
                    token.ThrowIfCancellationRequested();

                    // LOG.DATの場合はProtocolのheaderの頭出しは必要ない
                    byte head = br.ReadByte();
                    if (head == A_Page.header)
                    {
                        pages_sd.a.Update(br);
                        pages_sd.DumpA(csv_A_sd);
                    }
                    else if (head == P_Page.header)
                    {
                        pages_sd.p.Update(br);
                        pages_sd.DumpP(csv_P_sd);
                    }
                    else if (head == M_Page.header)
                    {
                        pages_sd.m.Update(br);
                        pages_sd.DumpM(csv_M_sd);
                    }
                    else if (head == G_Page.header)
                    {
                        pages_sd.g.Update(br);
                        pages_sd.DumpG(nmea_G_sd, ubx_G_sd);
                    }
                }
            }, token).ContinueWith(t =>
            {
                csv_A_sd.Close();
                csv_P_sd.Close();
                csv_M_sd.Close();
                nmea_G_sd.Close();
                ubx_G_sd.Close();

                cancelConvertTokenSource.Dispose();
                cancelConvertTokenSource = null;
                loggingTask = null;

                if (closing)
                {
                    return;
                }
                DialogResult result = MessageBox.Show("Complete to output CSV files");

                Invoke((MethodInvoker)(() =>
                {
                    buttonSDConvert.Text = "Convert";
                    buttonSDConvert.Enabled = true;
                }));
            });

            cancelConvertTokenSource = tokenSource;
            buttonSDConvert.Enabled  = false;
            buttonSDConvert.Text     = "Converting...";
        }