private bool MusicFileOnLocal()
        {
            string musicPath =
                Path.Combine(GlobalVariables.LOCAL_DIR + GlobalVariables.FOLDER_ROOT + GlobalVariables.FOLDER_PLAYLIST,
                             MotionID.ToString() + ".mp3");

            return(File.Exists(musicPath));
        }
        //private StreamWriter writer = new StreamWriter(@"WriteMotion.txt");
        // Transfer process:
        // 1. Create pair
        // 2. Send packets for motion file
        // 3. Close motion transfer
        // 4. Send packets for music file
        // 5. Close pair: success, save motion pair
        // 6. Cancel: cancel the operation, data won't be stored in mRobo,
        //  this command could be called any time after "Create pair" command
        public object Process()
        {
            const int trunkDataSize = 4096;
            string    musicPath     =
                Path.Combine(GlobalVariables.LOCAL_DIR + GlobalVariables.FOLDER_ROOT + GlobalVariables.FOLDER_PLAYLIST,
                             MotionID.ToString() + ".mp3");

            byte[] musicData = GlobalFunction.FileToByteArray(musicPath);
            if (musicData == null)
            {
                OnProcessError(ErrorCode.FileNotExist, "Music file not exist");
                if (_writeProcess)
                {
                    _logger.Error("Music file not exist");
                    DebugHelper.WriteLine("Music file not exist");
                }
                return(null);
            }
            string motionPath =
                Path.Combine(GlobalVariables.LOCAL_DIR + GlobalVariables.FOLDER_ROOT + GlobalVariables.FOLDER_PLAYLIST,
                             MotionID.ToString() + ".mrb");

            byte[] motionData = GlobalFunction.FileToByteArray(motionPath);
            if (motionData == null)
            {
                OnProcessError(ErrorCode.FileNotExist, "Motion file not exist");
                if (_writeProcess)
                {
                    _logger.Error("Motion file not exist");
                    DebugHelper.WriteLine("Motion file not exist");
                }
                return(null);
            }



            int numberOfMotionTrunk = motionData.Length / trunkDataSize;
            int numberOfMusicTrunk  = musicData.Length / trunkDataSize;

            int totalPackets      = numberOfMotionTrunk + numberOfMusicTrunk + 2;
            int count             = 0;
            int currentPercentage = -1;
            int tempPercentage    = 0;


            List <byte[]> listMotionTrunk = SplitFile(motionPath, trunkDataSize);

            List <byte[]> listMusicTrunk = SplitFile(musicPath, trunkDataSize);

            // Create pair
            if (CreatePair() != 1)
            {
                OnProcessError(ErrorCode.CreatePairError, "Create pair false");
                if (_writeProcess)
                {
                    _logger.Error("Create pair false");
                    DebugHelper.WriteLine("Create pair false");
                }
                return(0);
            }

            if (_writeProcess)
            {
                _logger.Info("Create pair done");
                DebugHelper.WriteLine("Create pair done");
            }
            // Transfer motion
            foreach (var trunk in listMotionTrunk)
            {
                var writeResult = WriteData(trunk, RobotPacket.PacketID.WriteMotionData);
                if (writeResult == 0)
                {
                    OnProcessError(ErrorCode.WriteDataError, "Write motion error");
                    if (_writeProcess)
                    {
                        _logger.Error("Write motion error");
                        DebugHelper.WriteLine("Write motion error");
                    }
                    return(0);
                }
                if (writeResult == 2)
                {
                    return(0);
                }
                count++;

                tempPercentage = count * 100 / totalPackets;
                if (tempPercentage > currentPercentage)
                {
                    currentPercentage = tempPercentage;
                    OnProgessReport(currentPercentage);
                    if (_writeProcess)
                    {
                        DebugHelper.WriteLine("Percentages: " + tempPercentage);
                        _logger.Info("Percentages: " + tempPercentage);
                    }
                }
            }

            // Close motion file
            if (CloseMotionFile() != 1)
            {
                OnProcessError(ErrorCode.CloseMotionFileError, "Close motion file error");
                if (_writeProcess)
                {
                    DebugHelper.WriteLine("Close motion file error");
                    _logger.Error("Close motion file error");
                }
                return(0);
            }
            if (_writeProcess)
            {
                DebugHelper.WriteLine("Transfer motion file done");
                _logger.Info("Transfer motion file done");
            }

            // Transfer music
            foreach (var trunk in listMusicTrunk)
            {
                var writeResult = WriteData(trunk, RobotPacket.PacketID.WriteMusicData);
                if (writeResult == 0)
                {
                    OnProcessError(ErrorCode.WriteDataError, "Write music error");
                    if (_writeProcess)
                    {
                        DebugHelper.WriteLine("Write music error");
                        _logger.Error("Write music error");
                    }
                    return(0);
                }
                if (writeResult == 2)
                {
                    return(0);
                }
                count++;
                tempPercentage = count * 100 / totalPackets;
                if (tempPercentage > currentPercentage)
                {
                    currentPercentage = tempPercentage;
                    OnProgessReport(currentPercentage);
                    if (_writeProcess)
                    {
                        DebugHelper.WriteLine("Percentages: " + tempPercentage);
                        _logger.Info("Percentages: " + tempPercentage);
                    }
                }
            }

            //Close pair
            if (ClosePair() != 1)
            {
                OnProcessError(ErrorCode.ClosePairError, "Close pair error");
                if (_writeProcess)
                {
                    DebugHelper.WriteLine("Close pair error");
                    _logger.Error("Close pair error");
                }
                return(0);
            }
            //writer.Close();
            if (_writeProcess)
            {
                DebugHelper.WriteLine("Close pair done");
                _logger.Info("Close pair done");
            }
            OnProgessReport(100);
            OnProcessSuccessfully(null);
            return(1);
        }