/// <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; } }