コード例 #1
0
ファイル: Form1.cs プロジェクト: zhangzheng1205/firstTest
        private void PackOneFrameData(ref string id, ref string data, ref BinaryReader reader)
        {
            mFrameSendFlag = 1;

            if (reader.BaseStream.Position < reader.BaseStream.Length)
            {
                byte[] byteDat = reader.ReadBytes(8);
                string str     = string.Empty;

                for (int i = 0; i < 8; i++)
                {
                    if (i >= byteDat.Length)
                    {
                        str = "00";
                    }
                    else
                    {
                        str = byteDat[i].ToString("X2");
                    }

                    if (i < 7)
                    {
                        data += str + " ";
                    }
                    else
                    {
                        data += str; //System.Convert.ToString(obj.Data[j], 16)
                    }
                }

                mSendFrameNum++;
                SendUpData(id, data);
                progressBar.Value = Convert.ToInt32(1000 * reader.BaseStream.Position / reader.BaseStream.Length);
                mLastFrame        = data;
                data = string.Empty;
            }
            else
            {
                if (mDoneCnt++ < 2)
                {
                    mDoneCnt            = 2;
                    progressBar.Visible = false;
                    mSendDone           = 1;
                    sendListBox.Items.Add("升级文件发送完成!");
                    data = mLastFrame;
                    SendUpData(id, data);
                    mUpCmd        = UpgradeCmd.CmdNone;
                    mSendFrameNum = 0;
                }
            }
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: zhangzheng1205/firstTest
        private void bmsUp_Click(object sender, EventArgs e)
        {
            string fileType = string.Empty;

            DllAdapte.VCI_ClearBuffer(mDevType, mDevInd, 0);

            //检查升级文件路径是否为空
            if (string.IsNullOrEmpty(mFilePath))
            {
                MessageBox.Show("请先选择升级文件!", "提示",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            //判断升级文件是否是bin文件
            fileType = Path.GetExtension(mFilePath);

            if (!fileType.Equals(".bin")) //if (fileType.Contains("bin"))
            {
                MessageBox.Show("升级文件类型不是xxx.bin,请选择bin文件!", "提示",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }


            mUpgradeFlag      = 1;                           //升级标志置1
            timerSend.Enabled = mIsOpen == 1 ? true : false; //使能发送定时器
            mUpCmd            = UpgradeCmd.CmdJump;
            mBinStream        = new FileStream(mFilePath, FileMode.Open, FileAccess.Read);
            mBinReader        = new BinaryReader(mBinStream);//二进制读写器
            mBinReader.BaseStream.Seek(0, SeekOrigin.Begin);

            FileInfo fileInfo = new FileInfo(mFilePath);

            mFileSize = (UInt32)fileInfo.Length;

            mSizeStr = (mFileSize & 0xff).ToString("X2") + " " + ((mFileSize >> 8) & 0xff).ToString("X2") + " " + ((mFileSize >> 16) & 0xff).ToString("X2") + " " + ((mFileSize >> 24) & 0xff).ToString("X2");

            upgradeBtn.Enabled = false;
        }
コード例 #3
0
ファイル: Form1.cs プロジェクト: zhangzheng1205/firstTest
        unsafe private void ReceiveUpData()
        {
            String idStr   = "";
            string dataStr = string.Empty;
            UInt32 res     = new UInt32();
            UInt32 canId   = 0;

            res = DllAdapte.VCI_GetReceiveNum(mDevType, mDevInd, canId);

            if (res == 0)
            {
                return;
            }

            //res = DllAdapte.VCI_Receive(mDevType, mDevInd, mCanInd, ref mRecObj[0],50, 100);
            UInt32 con_maxlen = 50;
            IntPtr pt         = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(VCI_CAN_OBJ)) * (Int32)con_maxlen);

            res = DllAdapte.VCI_Receive(mDevType, mDevInd, canId, pt, con_maxlen, 100);

            for (UInt32 i = 0; i < res; i++)
            {
                VCI_CAN_OBJ obj = (VCI_CAN_OBJ)Marshal.PtrToStructure((IntPtr)((UInt32)pt + i * Marshal.SizeOf(typeof(VCI_CAN_OBJ))), typeof(VCI_CAN_OBJ));
                idStr = System.Convert.ToString((Int32)obj.ID, 16);

                if (idStr.Contains("1441abaa"))    // && mPauseFlag == 0
                {
                    if (obj.Data[1] == (byte)0xcc)
                    {
                        mUpCmd = UpgradeCmd.CmdUpgrade;
                        sendListBox.Items.Add("同主机Ping成功!");
                    }
                    else
                    {
                        mUpCmd = UpgradeCmd.CmdPing;
                    }
                }

                if (idStr.Contains("1442abaa"))     // && mPauseFlag == 0
                {
                    if (obj.Data[1] == (byte)0xcc)
                    {
                        mFrameSendFlag = 0;
                        mUpgradeFlag   = 0;
                        mUpCmd         = UpgradeCmd.CmdNone;
                        //timerSend.Enabled = false;  //重启后要先关闭发送定时器
                        sendListBox.Items.Add("主机重启成功!");
                    }
                }

                if (idStr.Contains("1443abaa"))      // && mPauseFlag == 0
                {
                    if (obj.Data[1] == (byte)0xcc)
                    {
                        mUpCmd = UpgradeCmd.CmdSendData;
                        sendListBox.Items.Add("发送升级地址成功!");
                    }
                    else if (obj.Data[1] == (byte)0x33)
                    {
                        mUpgradeFlag = 0;
                        mUpCmd       = UpgradeCmd.CmdNone;
                        sendListBox.Items.Add("升级下载地址不符合FLASH空间大小!");
                    }
                    else
                    {
                        mUpCmd = UpgradeCmd.CmdUpgrade;
                    }
                }

                if (idStr.Contains("1444abaa"))     // && mPauseFlag == 0
                {
                    if (obj.Data[1] == (byte)0x33)
                    {
                        mRevFrameNum        = 0;
                        mUpgradeFlag        = 0;
                        progressBar.Visible = false;
                        mUpCmd = UpgradeCmd.CmdRun;
                        sendListBox.Items.Add("升级成功!");
                        mBinReader.Close();
                        mBinStream.Close();
                    }
                    else if (obj.Data[1] == (byte)0xcc)
                    {
                        mUpCmd = UpgradeCmd.CmdSendData;
                    }
                    else
                    {
                        if (mSendDone == 1)
                        {
                            progressBar.Visible = false;
                            mSendDone           = 0; //标志复位
                            mUpgradeFlag        = 0;
                            //mUpCmd = UpgradeCmd.CmdRun;
                            sendListBox.Items.Add("数据发送完成但未收到主机应答信号!");
                        }
                        else
                        {
                            mUpgradeFlag = 0;
                            mUpCmd       = UpgradeCmd.CmdNone;
                            sendListBox.Items.Add("提示:主机在本帧中有丢失数据!");
                        }
                    }
                }

                if (obj.RemoteFlag == 0)
                {
                    byte len = (byte)(obj.DataLen % 9);

                    for (byte j = 0; j < len; j++)
                    {
                        if (j == 0)
                        {
                            dataStr += obj.Data[j].ToString("X2");
                        }
                        else
                        {
                            dataStr += " " + obj.Data[j].ToString("X2"); //System.Convert.ToString(obj.Data[j], 16);
                        }
                    }
                }

                if (mPauseFlag == 0)
                {
                    if (mFrameSendFlag == 1)
                    {
                        mRevFrameNum++;
                    }

                    RevListBox.Items.Add("报文ID: 0x" + idStr + "  接收数据: " + dataStr + "    接收帧数: " + mRevFrameNum.ToString("X4"));
                    RevListBox.SelectedIndex = RevListBox.Items.Count - 1;
                }

                dataStr = string.Empty;
            }

            Marshal.FreeHGlobal(pt);
        }
コード例 #4
0
ファイル: Form1.cs プロジェクト: zhangzheng1205/firstTest
        private void timerSend_Tick(object sender, EventArgs e)
        {
            string id   = string.Empty;
            string data = string.Empty;

            switch (mUpCmd)
            {
            case UpgradeCmd.CmdNone:
                break;

            case UpgradeCmd.CmdJump:    //先app下载发送命令 ID:0x0040AAAB
                id   = "1440aaab";
                data = "00 cc cc cc cc cc cc cc";
                SendUpData(id, data);
                sendListBox.Items.Add("正在从APP跳转到IAP中...");

                if (mJumpTime++ >= 10)
                {
                    mJumpTime = 0;
                    mUpCmd    = UpgradeCmd.CmdPing;
                }

                break;

            case UpgradeCmd.CmdPing:    //先发送ping命令 ID:0x1841AAAB
                id   = "1441aaab";
                data = "ff ff ff ff 4b b4 5a a5";
                SendUpData(id, data);
                sendListBox.Items.Add("同主机握手中Ping...");
                mUpCmd = UpgradeCmd.CmdNone;
                break;

            case UpgradeCmd.CmdRun:    //再发送运行命令
                id   = "1442aaab";
                data = mLastFrame;
                SendUpData(id, data);
                sendListBox.Items.Add("主机软复位重启中...");
                mUpCmd = UpgradeCmd.CmdNone;
                break;

            case UpgradeCmd.CmdUpgrade:           //再发送升级命令
                id   = "1443aaab";
                data = "00 40 00 00 " + mSizeStr; // af 9b 01 00";
                SendUpData(id, data);
                sendListBox.Items.Add("发送APP应用升级地址...");
                mUpCmd = UpgradeCmd.CmdNone;
                break;

            case UpgradeCmd.CmdSendData:    //发送升级文件
                id = "1444aaab";
                progressBar.Visible = true;

                try
                {
                    //连发8帧数据,缩短发送时间
                    PackOneFrameData(ref id, ref data, ref mBinReader);
                    PackOneFrameData(ref id, ref data, ref mBinReader);
                    PackOneFrameData(ref id, ref data, ref mBinReader);
                    PackOneFrameData(ref id, ref data, ref mBinReader);
                    PackOneFrameData(ref id, ref data, ref mBinReader);
                    PackOneFrameData(ref id, ref data, ref mBinReader);
                    PackOneFrameData(ref id, ref data, ref mBinReader);
                    PackOneFrameData(ref id, ref data, ref mBinReader);
                }
                catch (EndOfStreamException ex)
                {
                    sendListBox.Items.Add("升级文件发送完成!");
                }
                catch (Exception ex)
                {
                    mUpgradeFlag       = 0;
                    upgradeBtn.Enabled = true;
                    sendListBox.Items.Add(ex.Message);
                    //MessageBox.Show(ex.Message, "错误",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }

                mUpCmd = UpgradeCmd.CmdNone;        //每8帧的发送

                break;

            default:
                upgradeBtn.Enabled = true;
                break;
            }
        }