using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.IO.Ports;
using System.IO;
namespace ArdupilotMega.Arduino
{
public delegate void ProgressEventHandler(int progress, string status);
///
/// Arduino STK interface
///
public interface ArduinoComms
{
bool connectAP();
bool keepalive();
bool sync();
byte[] download(short length);
byte[] downloadflash(short length);
bool setaddress(int address);
bool upload(byte[] data, short startfrom, short length, short startaddress);
bool uploadflash(byte[] data, int startfrom, int length, int startaddress);
Chip getChipType();
event ProgressEventHandler Progress;
// from serialport class
int BaudRate { get; set; }
bool DtrEnable { get; set; }
string PortName { get; set; }
StopBits StopBits { get; set; }
Parity Parity { get; set; }
bool IsOpen { get; }
void Open();
void Close();
int DataBits { get; set; }
}
public class Chip
{
public string name = "";
public byte sig1 = 0;
public byte sig2 = 0;
public byte sig3 = 0;
public uint size = 0;
static bool creating = true;
public static List chips = new List();
public static void Populate()
{
creating = false;
chips.Clear();
chips.Add(new Chip("ATmega2561", 0x1e, 0x98, 0x02, 0x100U)); //128 words
chips.Add(new Chip("ATmega2560", 0x1e, 0x98, 0x01, 0x100U)); //128 words
chips.Add(new Chip("ATmega1280", 0x1e, 0x97, 0x03, 0x80U)); //128 words
chips.Add(new Chip("ATmega1281", 0x1e, 0x97, 0x04, 0x80U)); //128 words
chips.Add(new Chip("ATmega128", 0x1e, 0x97, 0x02, 0x80U)); //128 words
chips.Add(new Chip("ATmega64", 0x1e, 0x96, 0x02, 0x80U)); //128 words
chips.Add(new Chip("ATmega32", 0x1e, 0x95, 0x02, 0x40U)); //64 words
chips.Add(new Chip("ATmega16", 0x1e, 0x94, 0x03, 0x40U)); //64 words
chips.Add(new Chip("ATmega8", 0x1e, 0x93, 0x07, 0x20U)); //32 words
chips.Add(new Chip("ATmega88", 0x1e, 0x93, 0x0a, 0x20U)); //32 words
chips.Add(new Chip("ATmega168", 0x1e, 0x94, 0x06, 0x40U)); //64 words
chips.Add(new Chip("ATmega328P", 0x1e, 0x95, 0x0F, 0x40U)); //64 words
chips.Add(new Chip("ATmega162", 0x1e, 0x94, 0x04, 0x40U)); //64 words
chips.Add(new Chip("ATmega163", 0x1e, 0x94, 0x02, 0x40U)); //64 words
chips.Add(new Chip("ATmega169", 0x1e, 0x94, 0x05, 0x40U)); //64 words
chips.Add(new Chip("ATmega8515", 0x1e, 0x93, 0x06, 0x20U)); //32 words
chips.Add(new Chip("ATmega8535", 0x1e, 0x93, 0x08, 0x20U));//32 words
foreach (Chip item in chips)
{
// Console.WriteLine(item);
}
}
public Chip(string nm, byte s1, byte s2, byte s3, uint size)
{
if (chips.Count == 0 && creating)
Populate();
name = nm;
sig1 = s1;
sig2 = s2;
sig3 = s3;
this.size = size;
}
public override string ToString()
{
return "Chip(" + name + ", " + sig1.ToString("X") + ", " + sig2.ToString("X") + ", " + sig3.ToString("X") + ", " + size + ")";
}
public override bool Equals(object obj)
{
Chip item = obj as Chip;
return (item.sig1 == this.sig1 && item.sig2 == this.sig2 && item.sig3 == this.sig3);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
}