예제 #1
0
        /// <summary>
        /// Next step in the update firmware process for 1 micro. Send address, data bytes or end program
        /// </summary>
        /// <remarks></remarks>
        private void Event_UpdateFirmwareStepFinished()
        {
            //Sequence (1 byte) + address data bytes
            byte[] SendData = null;

            //
            //Pasar al siguiente estado
            //
            if (m_UpdateFirmwareState == UpdateFirmwareState.ClearingFlash |
                m_UpdateFirmwareState == UpdateFirmwareState.SendingData)
            {
                if (m_UpdateFirmwareState == UpdateFirmwareState.ClearingFlash)
                {
                    m_UpdateFirmwareState = UpdateFirmwareState.SendingAddress;

                    //Inicializa el contador de secuencia
                    m_UpdateFirmwareSequence = (byte)0;
                }

                if (m_s19rec != null)
                {
                    m_s19recAntAddress = RoutinesLibrary.Data.DataType.IntegerUtils.BytesToInt(m_s19rec.address.ToArray(), true);                     //is BigEndian
                }

                //No hay mas datos para leer
                if (!m_MicroPrograms.getNextUpdaterData(ref m_s19rec))
                {
                    m_UpdateFirmwareState = UpdateFirmwareState.EndProgramming;

                    if (m_FramesSOLD_02 != null)
                    {
                        m_FramesSOLD_02.EndProgramming((byte)m_MicroUpdatingProgress);
                    }
                    if (m_FramesHA_02 != null)
                    {
                        m_FramesHA_02.EndProgramming((byte)m_MicroUpdatingProgress);
                    }
                    if (m_FramesSF_02 != null)
                    {
                        m_FramesSF_02.EndProgramming((byte)m_MicroUpdatingProgress);
                    }
                    if (m_FramesFE_02 != null)
                    {
                        m_FramesFE_02.EndProgramming((byte)m_MicroUpdatingProgress);
                    }
                }
            }
            else if (m_UpdateFirmwareState == UpdateFirmwareState.SendingAddress)
            {
                m_UpdateFirmwareState = UpdateFirmwareState.SendingData;
            }
            else if (m_UpdateFirmwareState == UpdateFirmwareState.EndProgramming)
            {
                m_UpdateFirmwareState = UpdateFirmwareState.None;

                //Añadir micro actualizado
                m_MicrosPendingReset.Add((byte)m_MicroUpdatingProgress);

                //Actualizar siguiente micro
                m_MicrosPendingUpdate.Remove((byte)m_MicroUpdatingProgress);
                UpdateNextMicro();
            }

            //
            //Enviar dato
            //
            if (m_UpdateFirmwareState == UpdateFirmwareState.SendingData)
            {
                //No es un bloque consecutivo. Enviar address
                if ((m_s19recAntAddress + CMicroPrograms02.BLOCK_MICRO_PROGRAM) < RoutinesLibrary.Data.DataType.IntegerUtils.BytesToInt(m_s19rec.address.ToArray(), true))                 //is BigEndian
                {
                    m_UpdateFirmwareState = UpdateFirmwareState.SendingAddress;
                }
                else
                {
                    SendData    = new byte[m_s19rec.data.ToArray().Length + 1];
                    SendData[0] = m_UpdateFirmwareSequence;
                    Array.Copy(m_s19rec.data.ToArray(), 0, SendData, 1, m_s19rec.data.ToArray().Length);

                    m_s19recAntAddress = RoutinesLibrary.Data.DataType.IntegerUtils.BytesToInt(m_s19rec.address.ToArray(), true);                     //is BigEndian

                    if (m_FramesSOLD_02 != null)
                    {
                        m_FramesSOLD_02.DataMemoryFlash(SendData, (byte)m_MicroUpdatingProgress);
                    }
                    if (m_FramesHA_02 != null)
                    {
                        m_FramesHA_02.DataMemoryFlash(SendData, (byte)m_MicroUpdatingProgress);
                    }
                    if (m_FramesSF_02 != null)
                    {
                        m_FramesSF_02.DataMemoryFlash(SendData, (byte)m_MicroUpdatingProgress);
                    }
                    if (m_FramesFE_02 != null)
                    {
                        m_FramesFE_02.DataMemoryFlash(SendData, (byte)m_MicroUpdatingProgress);
                    }
                }
            }

            //
            //Enviar address
            //
            if (m_UpdateFirmwareState == UpdateFirmwareState.SendingAddress)
            {
                SendData    = new byte[m_s19rec.address.ToArray().Length + 1];
                SendData[0] = m_UpdateFirmwareSequence;
                Array.Copy(m_s19rec.address.ToArray(), 0, SendData, 1, m_s19rec.address.ToArray().Length);

                m_s19recAntAddress = RoutinesLibrary.Data.DataType.IntegerUtils.BytesToInt(m_s19rec.address.ToArray(), true);                 //is BigEndian

                if (m_FramesSOLD_02 != null)
                {
                    m_FramesSOLD_02.AddressMemoryFlash(SendData, (byte)m_MicroUpdatingProgress);
                }
                if (m_FramesHA_02 != null)
                {
                    m_FramesHA_02.AddressMemoryFlash(SendData, (byte)m_MicroUpdatingProgress);
                }
                if (m_FramesSF_02 != null)
                {
                    m_FramesSF_02.AddressMemoryFlash(SendData, (byte)m_MicroUpdatingProgress);
                }
                if (m_FramesFE_02 != null)
                {
                    m_FramesFE_02.AddressMemoryFlash(SendData, (byte)m_MicroUpdatingProgress);
                }
            }

            //Siguiente secuencia
            if (m_UpdateFirmwareSequence == 255)
            {
                m_UpdateFirmwareSequence = (byte)0;
            }
            else
            {
                m_UpdateFirmwareSequence += 1;
            }
        }