Sharpodinclient เป็นไลบรารี .NET ที่อนุญาตให้แอปพลิเคชัน. NET สื่อสารกับอุปกรณ์ Samsung Android ในโหมดดาวน์โหลด
ไคลเอนต์ที่เหมาะสมสำหรับแฟลช (รูปภาพ, tar.md5, lz4), รับข้อมูลและการใช้งานคุณสมบัติอื่น ๆ
มันมีการใช้งาน. NET ของโปรโตคอล ODIN
การสื่อสาร USB ใน Sharpodinclient เป็นอนุกรม
ก่อนอื่นเพิ่มเนมสเปซของ Sharpodinclient ในโครงการของคุณ
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)
{
}
เหตุการณ์ ProgressChanged
ชื่อไฟล์: ชื่อไฟล์ของการกะพริบบนอุปกรณ์
สูงสุด: ขนาดไฟล์
ค่า: ขนาดไฟล์เขียน
เหตุการณ์บันทึก
ข้อความ: บันทึกข้อความ
สี: สีของบันทึก
{
//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();
}
}
ในตัวแปร info เราได้รับพจนานุกรมของ string string แนวคิดของ 'ปุ่ม' บางส่วน
capa = หมายเลข capaproduct = รหัสผลิตภัณฑ์model = หมายเลขรุ่นfwver = เวอร์ชันเฟิร์มแวร์vendor = ผู้ขายsales = รหัสการขายver = สร้างหมายเลขdid = DID Numberun = id ที่ไม่ซ้ำกันtmu_temp = หมายเลข TMUprov = บทบัญญัติ {
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;
}
}
}
}
}
สำหรับการดำเนินการใด ๆ ในโหมดดาวน์โหลดให้ต้องตรวจสอบ IsOdin ก่อนและเรียกใช้อาร์กิวเมนต์ LOKE_Initialize หากคุณไม่ต้องการเขียนอะไรในชุดอุปกรณ์ชุด LOKE_Initialize พารามิเตอร์ totalfilesize เป็นศูนย์ (0)
buffer = is byte อาร์เรย์ของหลุมจากอุปกรณ์คุณสามารถเขียนบัฟเฟอร์นี้บนไฟล์เพื่อบันทึก entry pit = เป็นรายการข้อมูลพาร์ติชันของอุปกรณ์ของคุณ
/// <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 parameter = หากคุณต้องการเขียน Pit จาก tar หรือ tar.md5 (เช่น CSC) ไฟล์บนอุปกรณ์คุณสามารถตั้งค่าเส้นทางไฟล์ประเภท tar ของคุณได้นอกจากนี้คุณสามารถตั้งค่าไฟล์ Pit Single ด้วยไฟล์. 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;
}
สำหรับการกระพริบ TAR, TAR.MD5 มีไฟล์ (LZ4, Image, Bin และอื่น ๆ ... ) เราจำเป็นต้องสร้างรายการ FileFlash จากข้อมูลแพ็คเกจ TAR ของคุณ
Enable คุณสมบัติใน FileFlash เป็น bool หากคุณตั้งค่าคุณสมบัตินี้ให้เป็นเท็จ Sharpodinclient ไม่แฟลชบนโทรศัพท์
ในฟังก์ชั่น FlashFirmware , Sharpodinclient สามารถเขียน LZ4 จากบรรจุภัณฑ์ tar ของคุณ
คุณสามารถแฟลชไฟล์เดียวของคุณเช่น boot.img หรือมากกว่าไฟล์ในพาร์ติชัน
/// <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;
}