Помощь в написании студенческих работ
Антистрессовый сервис

Алгоритм чтения регистрации РПДП

РефератПомощь в написанииУзнать стоимостьмоей работы

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;

}.

Показать весь текст
Заполнить форму текущей работой