public void UploadCustomPatterns(IEnumerable<UploadAudioPattern> audioPatterns, IEnumerable<UploadLedPattern> ledPatterns, Action<int> progressFunc)
{
EnsureConnected();
progressFunc(10);
FileSystemBuilder fileSystemBuilder = new FileSystemBuilder();
using (Stream fileSystemStream = fileSystemBuilder.Build(audioPatterns, ledPatterns))
{
// set the audio and led pattern count to 0 for the first run so that if the upload fails
// the returned names will not be corrupt
fileSystemStream.Position = 0;
fileSystemBuilder.WriteHeader(fileSystemStream, 0, 0);
fileSystemStream.Position = 0;
for (int address = 0; address < fileSystemStream.Length; address += 32)
{
SendData(address, fileSystemStream);
double progress = (double)address / fileSystemStream.Length;
progressFunc((int)(10 + (progress * 80.0)));
}
progressFunc(90);
// set the real audio and led pattern count
fileSystemStream.Position = 0;
fileSystemBuilder.WriteHeader(fileSystemStream, audioPatterns.Count(), ledPatterns.Count());
fileSystemStream.Position = 0;
for (int address = 0; address < FlashSectorSize; address += 32)
{
SendData(address, fileSystemStream);
}
progressFunc(100);
}
}