GrdCodeRun(): как увеличить максимальный размер выходного буфера?

Добрый день.

Используется ключ Guardant Code.

Необходимо, чтобы код в ключе вернул данные в буфере, размер которого должен быть больше, чем 0x0400 (1024), а именно - 1440 байт.

В документации https://www.guardant.ru/download/manual … e_Code.pdf
сказано:

По умолчанию размер буфера вводавывода установлен равным 1024 байта.
...
Максимальный суммарный размер буферов для вводавывода составляет 0x3F00 байт (16128 байт).

При билде загружаемого кода изменил значений параметров в makefile c 0x400 на 1440 :

#CFG_INPUT_BUFFER_SIZE   = 0x400
CFG_INPUT_BUFFER_SIZE   = 1440

#CFG_OUTPUT_BUFFER_SIZE  = 0x400
CFG_OUTPUT_BUFFER_SIZE  = 1440

- но это ничего не дало: при вызове метода GrdCodeRun со значением параметра dwDataFromDongleLng большим, чем 0x400 (1024) получаю код завершения = 89, то есть GrdE_gcNotEnoughRAM:

IO buffer size specified in loadable code is not enough for transmitting/receiving data

Вопрос:
Подскажите, пожалуйста, что нужно сделать, чтобы функция GrdCodeRun() могла вернуть в выходном буфере данных больше, чем 1024.

Спасибо.

Re: GrdCodeRun(): как увеличить максимальный размер выходного буфера?

Не факт что данные параметры настройки сильно влияют на результат.

В частности у меня при установленных параметрах:

# PC->KEY buffer name and size:
CFG_INPUT_BUFFER_NAME   = idata
CFG_INPUT_BUFFER_SIZE   = 0x400

# KEY->PC buffer name and size:
CFG_OUTPUT_BUFFER_NAME  = odata
CFG_OUTPUT_BUFFER_SIZE  = 0x400

# Program stack size allocate:
CFG_STACK_SIZE          = 0x800

Абсолютно спокойно из ключа возвращается буфер размером в 4804 байта в виде вот такой структуры:

type
  TDebugData = packed record
    dwA, 
    dwB,
    dwC, 
    dwD: DWORD;
  end;

  TDebugBuff = packed record
    byA: Byte;
    byB: Byte;
    byC: Byte;
    byD: Byte;
    Buff: array [0..299] of TDebugData;
  end;

procedure TNetworkDongleProvider.DebugDump1;
var
  dwResult: DWORD;
  OutData: TDebugBuff;
begin
  dwResult := Dongle.CodeRun(LoadableCodeIndex, 9, nil, 0,
    @OutData, SizeOf(TDebugBuff));
  if dwResult <> 0 then
    raise ENetworkDongleProviderException.CreateFmt(
      'Ошибка микропрограммы %d', [dwResult]);
end;

Re: GrdCodeRun(): как увеличить максимальный размер выходного буфера?

Александр, спасибо.
Что-то не получается... :(

Вы не могли бы пояснить, как параметры метода  CodeRun() Вашего объекта Dongle транслируются в параметры функции GrdCodeRun (из состава Guardant API)?


Спасибо.

Re: GrdCodeRun(): как увеличить максимальный размер выходного буфера?

vlad-mal пишет:

Александр, спасибо.
Что-то не получается... :(

Вы не могли бы пояснить, как параметры метода  CodeRun() Вашего объекта Dongle транслируются в параметры функции GrdCodeRun (из состава Guardant API)?


Спасибо.

LoadableCodeIndex - номер алгоритма с кодом
9 - dwPW1
потом входной буфер и размер оного
сразу за ним принимающий буфер и размер.

У меня такое ощущение что Вы работаете с ключом со старой прошивкой, где микрокод может вести себя немного по другому.
Я думаю самое лучшее это сообщить параметры ключа (из утилиты диагностики).

(2014-03-21 11:44:32 отредактировано vlad-mal)

Re: GrdCodeRun(): как увеличить максимальный размер выходного буфера?

Александр, спасибо.
Ключ вроде бы новый:

http://jpegshare.net/images/d0/17/d0173ef1de55e8dfd27cacf89ebecc6d.png