ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π ΠΠΠ
ModalResult = Application→MessageBoxW (L" Π€Π°ΠΉΠ» Ρ ΡΠ°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΠ°ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ?", L" Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅", MB_OKCANCEL|MB_ICONWARNING); Cmd. addr_hi += page_count;// ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ Π°Π΄ΡΠ΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ. ΠΡΠ΄Π΅Π»ΡΠ΅ΠΌ Π±ΡΡΠ΅Ρ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΈΡ FLASH-ΠΏΠ°ΠΌΡΡΠΈ. Int last_cycle = cycles — 1; // Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. EthFileName = «ΠΠ°ΠΏΠΈΡΡ» + Time ().FormatString («hh_mm_ss»)+ «.rpdp… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π ΠΠΠ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠΎΡΠ»Π΅ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΏΠΈΡΠΊΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΉ Π²StrGridRPDP, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ. ΠΠ»Ρ Π²ΡΠ±ΠΎΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ»ΠΈΠΊΠ½ΡΡΡ Π½Π° Π½Π΅Π΅ ΠΌΡΡΠΊΠΎΠΉ Π² StrGridRPDP. Π‘ΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ «ΠΡΠΈΠ½ΡΡΡ» BtnReΡeiveFromEthernet. ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ row Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π½ΠΎΠΌΠ΅Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π² StrGridRPDP Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈΠΎΠ± ΡΡΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π² Π±ΡΡΠ΅ΡΠ΅ (Π°Π΄ΡΠ΅ΡΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ Π ΠΠΠ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΡΡΠ°Π½ΠΈΡ). ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ usgDirectoryNΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ°ΠΉΠ» ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ .rpdp Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ ΡΡΠΈΡΠ°Π½Π½ΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ. ΠΠΌΡ ΡΠ°ΠΉΠ»Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ EthFileName. ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ Download_fast (), ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΈ Π½ΠΎΠΌΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ.
ΠΠΈΡΡΠΈΠ½Π³ 3.4.1.
void __fastcall TForm1: BtnReceiveClick (TObject *Sender).
{.
TDateTime dtTemp;
row = Form1->StrGridRPDP->Row-1;
dtTemp = FileNameReg (row);
SaveDialog1->InitialDir = usgDirectoryN;
SaveDialog1->Filter = L" (*.rpdp)|*.rpdp" ;
EthFileName = «ΠΠ°ΠΏΠΈΡΡ» + Time ().FormatString («hh_mm_ss»)+ «.rpdp» ;
SaveDialog1->FileName = EthFileName;
if (SaveDialog1->Execute ()).
{.
if (FileExists (SaveDialog1->FileName)).
{.
ModalResult = Application->MessageBoxW (L" Π€Π°ΠΉΠ» Ρ ΡΠ°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΠ°ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ?", L" Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅", MB_OKCANCEL|MB_ICONWARNING);
if (ModalResult == 2) { return; }.
}.
Download_fast (EthFileName, row);
}.
BtnCompare->Enabled = true;
}.
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ Π² ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠΈ Π ΠΠΠ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΈ Π·Π°ΠΏΠΈΡΡ ΡΡΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π² ΡΠ°ΠΉΠ». ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΈΡΡΠ²Π°Π΅ΠΌΡΡ Π·Π° ΡΠ°Π· ΡΡΡΠ°Π½ΠΈΡ pages_per_req ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠ°Π²Π½ΡΠΌ 50. ΠΠ°ΠΊ ΠΈ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΡ, Π΄Π»Ρ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π ΠΠΠ. ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ — RPDP_GET_RAW_PAGE, Π°Π΄ΡΠ΅Ρ ΡΡΠΈΡΡΠ²Π°Π΅ΠΌΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ·Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΡ g_sys_page[40 960] Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π½Π΅Π΅. ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠΈΠΊΠ»Π° ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ cycles. Π ΡΠΈΠΊΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ°Π½ΠΈΡ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡ, ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΡΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ cmd. len = page_count ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ Π² tmp_buf. ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ rscodec_decode_page4k (), Π²ΡΠ·Π²Π°Π½Π½ΠΎΠΉ ΠΈΠ· ΡΠ°ΠΉΠ»Π° rscodec_dll. ΠΠ΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ».
ΠΠΈΡΡΠΈΠ½Π³ 3.4.2.
bool _fastcall TForm1: Download_fast (UnicodeString asFileName, int row).
{.
int pages_per_req = 50;
char cTemp[2];
reg_info_t *info;
info = (reg_info_t *) g_sys_page;
iFileName = FileCreate (asFileName);
// ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
rpdp_cmd_t cmd;
cmd.pack_type = PKT_CMD;
cmd.cmd = RPDP_GET_RAW_PAGE;//.
cmd.addr_lo = 0;
cmd.addr_hi = info[row]. faddr. addr_hi;
cmd.len = pages_per_req;
// ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΠ»-Π²ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅.
int cycles = info[row]. pages / pages_per_req;
int last_pages = info[row]. pages % pages_per_req;
if (last_pages).
cycles++;
// Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌ Π±ΡΡΠ΅Ρ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΈΡ FLASH-ΠΏΠ°ΠΌΡΡΠΈ.
char *tmp_buf = (char*)malloc (pages_per_req * sizeof (nand_page4k_t));
// ΡΠ°ΠΌ ΡΠΈΠΊΠ» ΡΠΊΠ°ΡΠΊΠΈ.
int last_cycle = cycles — 1; // Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°.
for (int i=0; i.
{.
// ΠΎΠΏΡΠ΅Π΄. ΠΊΠΎΠ»-Π²ΠΎ ΡΡΡΠ°Π½ΠΈΡ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡ.
int page_count;
if (i == last_cycle).
{.
if (last_pages).
page_count = last_pages;
else.
page_count = pages_per_req;
} else.
{.
page_count = pages_per_req;
}.
cmd.len = page_count;
dev->send_cmd (&cmd);
dev->read_raw_pages (tmp_buf, page_count, 5000);
cmd.addr_hi += page_count;// ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ Π°Π΄ΡΠ΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ.
nand_page4k_t *page_buf = (nand_page4k_t *)tmp_buf;
// Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈΠ· Π±ΡΡΠ΅ΡΠ° ΠΈ.
// Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΈΡ Π² ΡΠ°ΠΉΠ».
for (int j=0; j < page_count; j++).
{.
rscodec_decode_page4k (&page_buf[j]);
if (i == 0 && j == 0).
{.
FileWrite (iFileName, page_buf[j]. data, 4082);
} else.
{.
FileWrite (iFileName, page_buf[j]. data, 4080);
}.
}.
}.
cTemp[0] = 0xFA; // Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π²Π΅ΡΡΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ.
cTemp[1] = 0xFA;
FileSeek (iFileName, 0, 0);
FileWrite (iFileName, cTemp, 2);
StatusBar->Panels->operator [](3)->Text = «Π§ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ «;
free (tmp_buf);
return true;
}.