Sharpodinclient adalah perpustakaan .NET yang memungkinkan aplikasi .NET untuk berkomunikasi dengan perangkat Android Samsung dalam mode unduhan.
Klien yang cocok untuk Flash (Image, Tar.MD5, LZ4), mendapatkan info dan menerapkan fitur lainnya.
Ini memberikan implementasi .NET dari protokol ODIN.
Komunikasi USB dalam Sharpodinclient adalah serialport.
Pertama tambahkan nama namespodinclient pada proyek Anda
using SharpOdinClient.structs;
using SharpOdinClient.util;
private Odin Odin = new Odin();
public MainWindow()
{
InitializeComponent();
Odin.Log += Odin_Log;
Odin.ProgressChanged += Odin_ProgressChanged;
}
private void Odin_ProgressChanged(string filename, long max, long value, long WritenSize)
{
}
private void Odin_Log(string Text, SharpOdinClient.util.utils.MsgType Color)
{
}
Acara ProgressChanged
Nama file: Nama file flashing di perangkat
Max: Ukuran file
Nilai: Ukuran file ditulis
Acara log
Teks: Teks log
Warna: Warna Log
{
//Find Auto odin device
var device = await Odin.FindDownloadModePort();
//device name
Console.WriteLine(device.Name);
// COM Port Of device
Console.WriteLine(device.COM);
// VID and PID Of Device
Console.WriteLine(device.VID);
Console.WriteLine(device.PID);
}
{
if(await Odin.FindAndSetDownloadMode())
{
//get info from device
var info = await Odin.DVIF();
await Odin.PrintInfo();
}
}
Dalam variabel info kami mendapatkan kamus string , string konsep beberapa 'tombol'
capa = Nomor CAPAproduct = ID Produkmodel = Nomor Modelfwver = versi firmwarevendor = vendorsales = Kode Penjualanver = bangun nomordid = melakukan angkaun = ID uniktmu_temp = nomor TMUprov = ketentuan {
if(await Odin.FindAndSetDownloadMode())
{
await Odin.PrintInfo();
if (await Odin.IsOdin())
{
if(await Odin.LOKE_Initialize(0))
{
var Pit = await Odin.Read_Pit();
if (Pit.Result)
{
var buffer = Pit.data;
var entry = Pit.Pit;
}
}
}
}
}
Untuk melakukan tindakan apa pun dalam mode unduhan, perlu pertama -tama untuk memeriksa IsOdin dan menjalankan argumen LOKE_Initialize , jika Anda tidak ingin menulis apa pun di perangkat set LOKE_Initialize totalfilesize parameter ke nol (0)
buffer = adalah array byte pit dari perangkat, Anda dapat menulis buffer ini pada file untuk menyimpan entry pit = adalah daftar informasi partisi perangkat Anda
/// <summary>
/// write pit file on your device
/// </summary>
/// <param name="pit">in this parameter, you can set tar.md5 contains have pit file(Like csc package of firmware)
/// or pit file with .pit format
/// </param>
/// <returns>true if success</returns>
public async Task<bool> Write_Pit(string pit)
{
if (await Odin.FindAndSetDownloadMode())
{
await Odin.PrintInfo();
if (await Odin.IsOdin())
{
if (await Odin.LOKE_Initialize(0))
{
var Pit = await Odin.Write_Pit(pit);
return Pit.status;
}
}
}
return false;
}
pit = Jika Anda ingin menulis pit dari file tar atau tar.md5 (seperti csc) di perangkat, Anda dapat mengatur jalur file tipe tar Anda, Anda juga dapat mengatur file pit tunggal dengan file format .pit /// Add List Of Your tar package (bl,ap,cp,csc , or more)
/// </summary>
/// <param name="ListOfTarFile">add tar type files path in this list</param>
/// <returns></returns>
public async Task<bool> FlashFirmware(List<string> ListOfTarFile)
{
var FlashFile = new List<FileFlash>();
foreach(var i in ListOfTarFile)
{
var item = Odin.tar.TarInformation(i);
if(item.Count > 0)
{
foreach (var Tiem in item)
{
if (!Exist(Tiem , FlashFile))
{
var Extension = System.IO.Path.GetExtension(Tiem.Filename);
var file = new FileFlash
{
Enable = true,
FileName = Tiem.Filename,
FilePath = i
};
if (Extension == ".pit")
{
//File Contains have pit
}
else if (Extension == ".lz4")
{
file.RawSize = Odin.CalculateLz4SizeFromTar(i, Tiem.Filename);
}
else
{
file.RawSize = Tiem.Filesize;
}
FlashFile.Add(file);
}
}
}
}
if(FlashFile.Count > 0)
{
var Size = 0L;
foreach (var item in FlashFile)
{
Size += item.RawSize;
}
if (await Odin.FindAndSetDownloadMode())
{
await Odin.PrintInfo();
if (await Odin.IsOdin())
{
if (await Odin.LOKE_Initialize(Size))
{
var findPit = FlashFile.Find(x => x.FileName.ToLower().EndsWith(".pit"));
if(findPit != null)
{
var res = MessageBox.Show("Pit Finded on your tar package , you want to repartition?", "", MessageBoxButton.YesNo);
if (res == MessageBoxResult.Yes)
{
var Pit = await Odin.Write_Pit(findPit.FilePath);
}
}
var ReadPit = await Odin.Read_Pit();
if (ReadPit.Result)
{
var EfsClearInt = 0;
var BootUpdateInt = 1;
if (await Odin.FlashFirmware(FlashFile, ReadPit.Pit, EfsClearInt, BootUpdateInt, true))
{
if (await Odin.PDAToNormal())
{
return true;
}
}
}
}
}
}
}
return false;
}
Untuk tar berkedip, tar.md5 berisi file (LZ4, gambar, bin dan banyak lagi ...) Kita perlu membuat daftar FileFlash dari informasi paket tar Anda.
Enable Properti di FileFlash adalah bool jika Anda mengatur penggantungan ini ke false, sharpodinclient tidak berkedip di telepon.
Dalam fungsi FlashFirmware , Sharpodinclient dapat menulis lz4 dari berisi paket tar Anda
Anda dapat mem -flash file tunggal Anda seperti boot.img atau lebih banyak file di partisi
/// <summary>
/// Flash Single File lz4 , image
/// </summary>
/// <param name="FilePath">path of your file</param>
/// <param name="PartitionFileName">like boot.img , sboot.bin or more ...</param>
/// <returns></returns>
public async Task<bool> FlashSingleFile(string FilePath , string PartitionFileName)
{
var FlashFile = new FileFlash
{
Enable = true,
FileName = PartitionFileName,
FilePath = FilePath,
RawSize = new FileInfo(FilePath).Length
};
if (await Odin.FindAndSetDownloadMode())
{
await Odin.PrintInfo();
if (await Odin.IsOdin())
{
if (await Odin.LOKE_Initialize(FlashFile.RawSize))
{
var ReadPit = await Odin.Read_Pit();
if (ReadPit.Result)
{
var EfsClearInt = 0;
var BootUpdateInt = 0;
if (await Odin.FlashSingleFile(FlashFile, ReadPit.Pit, EfsClearInt, BootUpdateInt, true))
{
if (await Odin.PDAToNormal())
{
return true;
}
}
}
}
}
}
return false;
}