SharpoDinclient는 .NET 애플리케이션이 다운로드 모드에서 Samsung Android 장치와 통신 할 수있는 .NET 라이브러리입니다.
Flash (Image, Tar.Md5, LZ4)에 적합한 클라이언트, 정보를 얻고 다른 기능을 구현합니다.
ODIN 프로토콜의 .NET 구현을 제공합니다.
Sharpodinclient의 USB 통신은 시리얼 포트입니다.
먼저 프로젝트에 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 이벤트
파일 이름 : 장치에서 플래시의 파일 이름
MAX : 파일 크기
값 : 파일 크기가 짜여져 있습니다
로그 이벤트
텍스트 : 로그 텍스트
색상 : 로그의 색상
{
//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 = CAPA 번호product = 제품 IDmodel = 모델 번호fwver = 펌웨어 버전vendor = 공급 업체sales = 판매 코드ver = 빌드 번호did = 숫자un = 고유 IDtmu_temp = tmu 번호prov = 제공 {
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 = 장치의 바이트 배열입니다. entry 를 저장하기 위해이 버퍼를 파일에 쓸 수 있습니다 = 장치의 파티션 정보 목록입니다.
/// <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 = Tar 또는 Tar.md5 (예 : CSC) 파일에서 PIT를 쓰려면 TAR 유형 파일 경로를 설정할 수 있으며 .pit 형식 파일로 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.md5는 플래시 타르를 위해 파일 (lz4, 이미지, 빈 등 ...)을 포함합니다. Tar 패키지 정보에서 FileFlash 목록을 작성해야합니다.
FileFlash 의 속성 Enable bool 이 프로파일을 False로 설정하면 SharpoDinclient가 전화로 플래시되지 않습니다.
FlashFirmware 기능에서 SharpoDinclient는 TAR 패키지 포함에서 LZ4를 쓸 수 있습니다.
파티션에서 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;
}