ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΡΠ΅Π½ΠΈΡ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΡ Π ΠΠΠ
Π ΡΡΠ½ΠΊΡΠΈΠΈ get_header () ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ. cmd. pack_type Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠΈΠΏ ΠΊΠΎΠΌΠ°Π½Π΄Ρ cmd. cmd Π·Π°Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ RPDP_GET_PAGE, Π°Π΄ΡΠ΅Ρ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΈΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, Π° Π΄Π»ΠΈΠ½Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² 1. ΠΠ°Π»Π΅Π΅ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠΈΠΊΠ» ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΡΡΠ°Π½ΠΈΡ, Π³Π΄Π΅ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π° ΠΏΠΎΡΠΎΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ read_pages (), ΠΊΠΎΡΠΎΡΠΎΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΡΠ΅Π½ΠΈΡ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΡ Π ΠΠΠ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΅Π·Π΄ ΠΏΡΠΈΠ΅Ρ Π°Π» Π² Π΄Π΅ΠΏΠΎ, ΠΈ Π±ΡΠ»ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ΅Π½Π΄ΠΎΠΌ ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΅Π·Π΄Π° ΠΏΠΎ Wi-Fi, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΉ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π ΠΠΠ.
Π ΠΈΡΡΠ½ΠΎΠΊ 3.3.1 ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π‘ΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
ΠΠΈΡΡΠΈΠ½Π³ 3.3.1.
__fastcall TForm1: TForm1(TComponent* Owner).
: TForm (Owner).
{.
ProgName = L" Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π° Π ΠΠΠ" ;
Form1->Caption = ProgName;
rscodec_init (); //ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ rscodec.dll.
netlib_init (); //ΠΠ½ΠΈΡΠΈΠΈΡΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Winsock DLL ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ WSAStartup ().
dev = new CEthDev ();
dev->open ();
}.
Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ netlib_init () ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Winsock, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π²ΡΡΠ΅. ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΊΠ»Π°ΡΡΠ° CEthDev ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ°Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° open (). ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π΅Ρ UDP-ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ udp_client (), ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π² Π½Π°ΡΠ°Π»Π΅ Π³Π»Π°Π²Ρ.
ΠΠΈΡΡΠΈΠ½Π³ 3.3.2.
int CEthDev: open (int dev_no).
{.
//ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΎΠΊΠ΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ ΠΈ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
sd = udp_client (&sa, SRC_IP_ADDR, 0);
setRecvBufSize (1024*1024*10);
return sd;
}.
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ²Π΅ΡΡΠΈ Π½Π° ΡΠΊΡΠ°Π½ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π½Π° Π ΠΠΠ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΉ. Π‘ΠΏΠΈΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ StrGridRPDP[6] ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ «ΠΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅» (BtnReadHeader).
ΠΠΈΡΡΠΈΠ½Π³ 3.3.3.
void __fastcall TForm1: BtnReadHeaderClick (TObject *Sender).
{.
bool bResult;
igCountRPDP = 0;
Screen->Cursor = crHourGlass;
bResult = this->ReadHeader (); //ΠΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ ΠΠ³Π»Π°Π²Π»Π΅Π½ΠΈΡ.
Screen->Cursor = crDefault;
}.
//—————————————————————————————————————;
bool __fastcall TForm1: ReadHeader ().
{.
int ret_code, count;
reg_info_t *farr;
try {.
// ΠΡΠ΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎΠ΄ ΡΡΡΠ°Π½ΠΈΡΡ.
char *sys_page = new char[4096];
// Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅.
ginfo = (reg_info_t *) g_sys_page;
igCountRPDP = 0;
// Π¦ΠΈΠΊΠ» ΡΡΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΉ.
for (int block = 0; block < 10; block++).
{.
// ΡΠΈΡΠ°Π΅ΠΌ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ (4096 Π±Π°ΠΉΡ).
for (int i = 0; i < 5; i++).
{.
ret_code = dev->get_header (sys_page, 1, block);
if (ret_code == 4096).
{.
break;
}.
if (i == 4).
{.
Application->MessageBoxW (L" Π ΠΠΠ Π½Π΅ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ.", L" ΠΡΠΈΠ±ΠΊΠ°", MB_OK);
return false;
}.
Sleep (50);
}.
for (int i = 0; i < 4094; i++).
{.
g_sys_page[(block*4094)+i] = sys_page[i]; //Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.
}.
// Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ 89 ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΉ.
for (count=0;count<89;count++).
{.
if (is_free_cell (&ginfo[igCountRPDP+count])).
//if = 0xFF goto end_found.
{.
igCountRPDP = igCountRPDP + count;
// igCountRPDP ΡΡΠ΅ΡΡΠΈΠΊ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΉ.
goto end_found;
}.
}.
igCountRPDP = igCountRPDP + count;
}.
end_found: //.
if (count > 0).
{.
this->FillStrGridRPDP (count);//ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ StrGrid ΠΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ.
return true;
}.
delete [] sys_page;
}.
catch (String str).
{.
}.
return false;
}.
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π² ΡΡΡΠ°Π½ΠΈΡΠ΅:
ΠΠΈΡΡΠΈΠ½Π³ 3.3.4.
int TForm1: is_free_cell (void *faddr).
{.
unsigned int i;
unsigned char *b;
int free;
b = (unsigned char *)faddr;
free = 1;
for (i=0; i < sizeof (reg_info_t); i++).
{.
if (b[i] ≠ 0xFF).
{.
free = 0;
break;
}.
}.
return free;
}.
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ Π ΠΠΠ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π² Π²ΠΈΠ΄Π΅ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. Π Π°Π·ΠΌΠ΅Ρ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ ΡΠ°Π²Π΅Π½ 4096 Π±Π°ΠΉΡ. ΠΠ΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ° Π΄Π°Π»Π΅Π΅ Π±ΡΠ΄Π΅Ρ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΡΡΡΠ°Π½ΠΈΡΠ΅ΠΉ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΎΠΌ. Π ΡΡΠ½ΠΊΡΠΈΠΈ ReadHeader () ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ sys_page Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 4096 Π±Π°ΠΉΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ginfo Π½Π° ΡΠΈΠΏ reg_info_t, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ.
ΠΠΈΡΡΠΈΠ½Π³ 3.3.5.
struct reg_info_t.
{.
rtc_time_t rtc_time; // Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
rpdp_addr_tfaddr; // Π°Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ.
unsigned int pages; // ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ°Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΠΈΡΠ°ΡΠΈΠΈ.
};
Π’ΠΈΠΏreg_info_t ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² Ρ ΠΈΠ΄Π΅ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ rpdr.h. ΠΡΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΠ΅Ρ ΠΎΠ΄Π½Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ. ΠΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π°Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π² ΠΏΠ°ΠΌΡΡΠΈ Π ΠΠΠ faddr, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ°Π½ΠΈΡ pages, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ, Ρ ΡΠ°Π½ΡΡΡΡΡΡ Π² rtc_time ΡΠΈΠΏΠ° rtc_time_t.
ΠΠΈΡΡΠΈΠ½Π³ 3.3.6.
//ΡΡΡΡΠΊΡΡΡΠ°, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠ°Ρ Π²ΡΠ΅ΠΌΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ.
struct rtc_time_t.
{.
int sec; // ΡΠ΅ΠΊΡΠ½Π΄Ρ.
int min; // ΠΌΠΈΠ½ΡΡΡ.
int hour;// ΡΠ°ΡΡ.
int mday;// Π΄Π΅Π½Ρ ΠΌΠ΅ΡΡΡΠ°.
int mon; // ΠΌΠ΅ΡΡΡ.
int year;// Π³ΠΎΠ΄.
int wday;// Π΄Π΅Π½Ρ Π½Π΅Π΄Π΅Π»ΠΈ.
int yday;// Π΄Π΅Π½Ρ Π³ΠΎΠ΄Π°.
int days_ago;// ΠΏΡΠΎΡΠ»ΠΎ Π΄Π½Π΅ΠΉ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π·Π°ΠΏΡΡΠΊΠ°.
};
ΠΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠΈΠΊΠ» ΡΡΠ΅Π½ΠΈΡ 10 ΡΡΡΠ°Π½ΠΈΡ (Π±Π»ΠΎΠΊΠΎΠ²). Π€ΡΠ½ΠΊΡΠΈΡ get_header (), ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ Π² ΠΊΠ»Π°ΡΡΠ΅ CEthDev, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΠΈΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Π² ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ sys_page ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ. ΠΠ° ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΄Π°Π΅ΡΡΡ ΠΏΡΡΡ ΠΏΠΎΠΏΡΡΠΎΠΊ Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠΌ Π² 50 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄. ΠΡΠ»ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ get_header () Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 4096, ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°ΡΡΡΡ, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ΄Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ «Π ΠΠΠ Π½Π΅ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ». Π€ΡΠ½ΠΊΡΠΈΡ get_header () Π±ΡΠ΄Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π° Π΄Π°Π»Π΅Π΅.
ΠΡΠΈΠ½ΡΡΠ°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π²ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΡ g_sys_page[40 960] ΡΠΈΠΏΠ° unsigned char.
Π ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΈΠ½ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΡ ΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ 89 ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡΡ (Π°Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ°Π½ΠΈΡ, Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ), Π½ΠΎ ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈ ΠΌΠ΅Π½ΡΡΠ΅. ΠΠ»Ρ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΉ Π² ΡΡΡΠ°Π½ΠΈΡΠ΅ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΡ Π²Π²ΠΎΠ΄ΠΈΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ igCountRPDP ΡΠΈΠΏΠ° int. ΠΠΎΠ΄ΡΡΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΈΠΊΠ»Π΅ for () ΠΏΠΎ Π²ΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ 89 ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡΠΌ. ΠΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ is_free_cell (). is_free_cell () ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ, Π³Π΄Π΅ Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ, ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ Π±Π°ΠΉΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 0xFF ΠΈ Π΅ΡΠ»ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ, ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π²ΡΠ²ΠΎΠ΄ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠ°ΠΌΡΡΡ ΠΏΡΡΡΠ° ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΠΈΡΡ. Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, Π΅ΡΠ»ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈ false Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ, ΡΡΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π² ΠΏΠ°ΠΌΡΡΠΈ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΠΈΡΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ ΠΈΡ ΠΏΠΎΠ΄ΡΡΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° igCountRPDP, ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π²StrGridRPDP Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ FillStrGridRPDP (). Π€ΡΠ½ΠΊΡΠΈΡ FillStrGridRPDP () Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΠΎΠ»Π±ΡΡ ΡΠ°Π±Π»ΠΈΡΡ, Π·Π°ΠΏΠΈΡΡΠ²Π°Ρ ΡΡΠ΄Π° Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ (ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ°Π½ΠΈΡ, ΡΠ°Π·ΠΌΠ΅Ρ Π² Π±Π°ΠΉΡΠ°Ρ ), Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π±ΡΠ»Π° Π·Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Π ΠΠΠ.
ΠΠΎΡΠ»Π΅ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΡ Π ΠΠΠ, ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ get_header () ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π² Π±ΡΡΠ΅Ρ sys_page.
ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ Π ΠΠΠ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡ Π ΠΠΠ ΡΡΡΠ°Π½ΠΈΡΡ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π΅ΠΌΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² Ρ ΠΈΠ΄Π΅ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ rpdp.h. ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄:
ΠΠΈΡΡΠΈΠ½Π³ 3.3.7.
// ΠΊΠΎΠΌΠ°Π½Π΄Ρ cmd Π΄Π»Ρ Π ΠΠΠ.
#define RPDP_GET_PAGE0 // ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ Π ΠΠΠ.
#define RPDP_ERASE_BLOCK 4 // ΡΡΠΈΡΠ°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° Π ΠΠΠ.
#define RPDP_GET_TIME5 // ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π ΠΠΠ.
#define RPDP_SET_TIME6 // ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π ΠΠΠ.
#define RPDP_PUT_PAGE9// Π·Π°ΠΏΠΈΡΡ Π±Π΅Π· ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ.
#define RPDP_GET_RAW_PAGE10 // ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡ Π ΠΠΠ.
#define RPDP_GET_VERSION 14 // ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ Π ΠΠΠ ΠΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° Π ΠΠΠ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ rpdp_cmd_t, Π³Π΄Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΡΠΈΠΏ ΠΊΠΎΠΌΠ°Π½Π΄Ρ (Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π²ΡΡΠ΅), Π°Π΄ΡΠ΅Ρ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΡΠ»ΠΎΠ²Π°, Π΄Π»ΠΈΠ½Ρ ΡΠ΄Π²ΠΈΠ³Π° ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
ΠΠΈΡΡΠΈΠ½Π³ 3.3.8.
struct rpdp_cmd_t.
{.
unsigned char pack_type;
unsigned int cmd;
unsigned int addr_lo;
unsigned int addr_hi;
unsigned int len;
unsigned charreserv[100];
};
Π ΡΡΠ½ΠΊΡΠΈΠΈ get_header () ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ. cmd. pack_type Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠΈΠΏ ΠΊΠΎΠΌΠ°Π½Π΄Ρ cmd. cmd Π·Π°Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ RPDP_GET_PAGE, Π°Π΄ΡΠ΅Ρ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΈΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, Π° Π΄Π»ΠΈΠ½Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² 1. ΠΠ°Π»Π΅Π΅ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠΈΠΊΠ» ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΡΡΠ°Π½ΠΈΡ, Π³Π΄Π΅ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π° ΠΏΠΎΡΠΎΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ read_pages (), ΠΊΠΎΡΠΎΡΠΎΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΠ΄ ΡΡΡΠ°Π½ΠΈΡΡ sys_page. ΠΠ°Π»Π΅Π΅ Π² ΡΠΈΠΊΠ»Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ, ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΡ. Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΡ Π±Π°ΠΉΡ.
ΠΠΈΡΡΠΈΠ½Π³ 3.3.9.
intCEthDev:get_header (void *buf, unsigned int pages_count, int start_block).
{.
rpdp_cmd_t cmd;
int ret_code;
reg_info_t *farr;
rpdp_addr_tfaddr;
cmd.pack_type = PKT_CMD;
cmd.cmd = RPDP_GET_PAGE; // ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ Π ΠΠΠ.
cmd.addr_lo = 0;
cmd.addr_hi = (7 << 20) + (start_block << 8); // Π°Π΄ΡΠ΅Ρ.
cmd.len = 1;
char *tmp_buf = (char *)buf;
for (int i = 0; i< pages_count; i++).
{.
send_cmd (&cmd);
ret_code = read_pages (tmp_buf, 1,5000);
cmd.addr_hi++;
tmp_buf += 4096;
}.
return ret_code;
}.
ΠΡΠΏΡΠ°Π²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΡ Π ΠΠΠ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ send_cmd ().Π‘Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΡΡΠΊΡΡΡΡdest, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ IP-Π°Π΄ΡΠ΅Ρ ΠΏΡΠ½ΠΊΡΠ° Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡDST_IP_ADDR ="192.168.1.10″ ΠΈ ΠΏΠΎΡΡ. ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ cmd Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ sendto () Π² ΠΏΡΠ½ΠΊΡ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ dest.
ΠΠΈΡΡΠΈΠ½Π³ 3.3.10.
//ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (cmd).
int CEthDev: send_cmd (rpdp_cmd_t *cmd).
{.
struct sockaddr_in dest;
int ret_code;
set_address (&dest, DST_IP_ADDR, DST_UDP_PORT);
ret_code = sendto (sd,(const char*)cmd, sizeof (rpdp_cmd_t), 0, (sockaddr*)&dest, sizeof (dest));
return ret_code;
}.
Π€ΡΠ½ΠΊΡΠΈΡ read_pages () Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ Π±Π°ΠΉΡ read_bytes ().
ΠΠΈΡΡΠΈΠ½Π³ 3.3.11.
//Π€ΡΠ½ΠΊΡΠΈΡ ΡΠΈΡΠ°Π΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈΠ· Π ΠΠΠ, 1 ΡΡΡΠ°Π½ΠΈΡΠ° — 4096.
int CEthDev: read_pages (void *data, int pages_count, int tout).
{.
unsigned char *b;
int ret_code;
b = (unsigned char *)data;
for (int i=0;i.
{.
ret_code = read_bytes (&b[i*4096], 4096, tout); //ΡΠΈΡΠ°Π΅Ρ ΠΏΠΎ 4096 Π±Π°ΠΉΡ Π·Π° ΡΠ°Π·.
}.
return ret_code;
}.
//—————————————————————————————————————;
Π ΡΡΠ½ΠΊΡΠΈΠΈ read_bytes () ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΎΠ±ΡΡΠΈΡ recv_event, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ WSAEventSelect () Π°ΡΡΠΎΡΠΈΠΈΡΡΠ΅ΡΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΡΠ΅ΡΠ΅Π²ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ, Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ΠΌ ΡΡΠ΅Π½ΠΈΡ FD_READ.Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠΎΡΠ»Π΅ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ cmd Π½Π° ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ, ΠΊΠ»ΠΈΠ΅Π½Ρ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ FD_READ. ΠΡΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ WAIT_TIMEOUT, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ recvfrom (). Π€ΡΠ½ΠΊΡΠΈΡ recvfrom () ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ, Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π΅Π΅ Π² Π±ΡΡΠ΅Ρ sys_page ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠ½ΡΡΡΡ Π±Π°ΠΉΡ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ recvfrom () Π΄Π°Π½ΠΎ Π² Π½Π°ΡΠ°Π»Π΅ Π³Π»Π°Π²Ρ.
ΠΠΈΡΡΠΈΠ½Π³ 3.3.12.
int CEthDev: read_bytes (void *data, int len, int tout).
{.
int fromlen;
struct sockaddr_in saddr;
int count;
count = -1;
//create an event object.
HANDLE recv_event = CreateEvent (0,0,0,0);
BOOL bSend = TRUE;
int iCnt;
WSAEventSelect (sd, recv_event, FD_READ);
DWORD dwRet = WaitForSingleObject (recv_event, tout);
if (dwRet ≠ WAIT_TIMEOUT).
{.
count = recvfrom (sd, (char*)data, len, 0, 0, 0);
}.
CloseHandle (recv_event);
return count;
}.