unit e502api; interface uses Windows, SysUtils, x502api; const { События поиска сетевых сервисов } E502_ETH_SVC_EVENT_NONE = 0; // Ни одного события не произошло E502_ETH_SVC_EVENT_ADD = 1; // Обнаружено появление нового сетевого сервиса E502_ETH_SVC_EVENT_REMOVE = 2; // Обнаружено исчезновение ранее доступного сетевого сервиса E502_ETH_SVC_EVENT_CHANGED = 3; // Изменение параметров ранее обнаруженного сетевого сервиса // Описатель конфигурации сетевого интерфейса. type st_e502_eth_config_state = record end; type t_e502_eth_config_hnd = ^st_e502_eth_config_state; type t_e502_mac_addr = array[0..X502_MAC_ADDR_SIZE-1] of byte; // Описатель контекста поиска устройств в сети type st_e502_eth_svc_browse_context = record end; type t_e502_eth_svc_browse_hnd = ^st_e502_eth_svc_browse_context; // Описатель сетевого сервиса type st_e502_eth_svc_record = record end; type t_e502_eth_svc_record_hnd = ^st_e502_eth_svc_record; //Получение списка серийных номеров модулей E502, подключенных по USB function E502_UsbGetSerialList(out serials: array of string; flags: LongWord; out devcnt: LongWord) : LongInt; overload; function E502_UsbGetSerialList(out serials: array of string; flags: LongWord) : LongInt; overload; //Открытие модуля E502, подключенного по USB, по его серийному номеру. function E502_OpenUsb(hnd: t_x502_hnd; serial: string): LongInt; stdcall; //Открытие модуля E502 по IP-адресу function E502_OpenByIpAddr(hnd : t_x502_hnd; ip_addr: LongWord; flags : LongWord; tout: LongWord) : LongInt; stdcall; //Получить список записей, соответствующих подключенным модулям E502 function E502_UsbGetDevRecordsList(out list: array of t_x502_devrec; flags : LongWord; out devcnt: LongWord) : LongInt; overload; function E502_UsbGetDevRecordsList(out list: array of t_x502_devrec; flags : LongWord) : LongInt; overload; //Создание записи о устройстве с указанным IP-адресом function E502_MakeDevRecordByIpAddr(var devrec: t_x502_devrec; ip_addr: LongWord; flags : LongWord; tout: LongWord) : LongInt; stdcall; //Установка TCP-порта управляющего соединения для записи о устройстве function E502_EthDevRecordSetCmdPort(var devrec: t_x502_devrec; cmd_port: Word) : LongInt; stdcall; // Установка TCP-порта соединения передачи данных для записи о устройстве function E502_EthDevRecordSetDataPort(var devrec: t_x502_devrec; data_port: Word) : LongInt; stdcall; //Создание записи о устройстве по описателю сетевого сервиса function E502_MakeDevRecordByEthSvc(var devrec: t_x502_devrec; svc : t_e502_eth_svc_record_hnd; flags : LongWord; tout: LongWord) : LongInt; stdcall; //Получение текущего IP-адреса устройства function E502_GetIpAddr(hnd: t_x502_hnd; out ip_addr : LongWord) : LongInt; stdcall; // Создание описателя конфигурации сетевого интерфейса. function E502_EthConfigCreate() : t_e502_eth_config_hnd; stdcall; // Освобождение описателя конфигурации сетевого интерфейса. function E502_EthConfigFree(cfg: t_e502_eth_config_hnd): LongInt; stdcall; // Чтение текущей сетевой конфигурации интерфейса function E502_EthConfigRead(hnd: t_x502_hnd; cfg: t_e502_eth_config_hnd): LongInt; stdcall; // Запись сетевой конфигурации интерфейса function E502_EthConfigWrite(hnd: t_x502_hnd; cfg: t_e502_eth_config_hnd; passwd : string): LongInt; stdcall; // Копирование содержимого сетевой конфигурации интерфейса function E502_EthConfigCopy(src_cfg: t_e502_eth_config_hnd; dst_cfg: t_e502_eth_config_hnd): LongInt; stdcall; // Определение, разрешен ли интерфейс Ethernet function E502_EthConfigGetEnabled(cfg: t_e502_eth_config_hnd; out en : LongBool): LongInt; stdcall; // Разрешение интерфейса Ethernet function E502_EthConfigSetEnabled(cfg: t_e502_eth_config_hnd; en : LongBool): LongInt; stdcall; // Определение, разрешено ли автоматическое получение параметров IP function E502_EthConfigGetAutoIPEnabled(cfg: t_e502_eth_config_hnd; out en: LongBool): LongInt; stdcall; // Разрешение автоматического получения параметров IP function E502_EthConfigSetAutoIPEnabled(cfg: t_e502_eth_config_hnd; en: LongBool): LongInt; stdcall; // Определение, разрешен ли пользовательский MAC-адрес function E502_EthConfigGetUserMACEnabled(cfg: t_e502_eth_config_hnd; out en: LongBool): LongInt; stdcall; // Определение, разрешен ли пользовательский MAC-адрес function E502_EthConfigSetUserMACEnabled(cfg: t_e502_eth_config_hnd; en : LongBool): LongInt; stdcall; // Получение установленного статического IP-адреса function E502_EthConfigGetIPv4Addr(cfg: t_e502_eth_config_hnd; out ip_addr : LongWord): LongInt; stdcall; // Установка статического IP-адреса function E502_EthConfigSetIPv4Addr(cfg: t_e502_eth_config_hnd; ip_addr: LongWord): LongInt; stdcall; // Получение установленной статической маски подсети function E502_EthConfigGetIPv4Mask(cfg: t_e502_eth_config_hnd; out mask : LongWord): LongInt; stdcall; // Установка статической маски подсети function E502_EthConfigSetIPv4Mask(cfg: t_e502_eth_config_hnd; mask : LongWord): LongInt; stdcall; // Получение установленного статического адреса шлюза function E502_EthConfigGetIPv4Gate(cfg: t_e502_eth_config_hnd; out gate: LongWord): LongInt; stdcall; // Установка статического адреса шлюза function E502_EthConfigSetIPv4Gate(cfg: t_e502_eth_config_hnd; gate: LongWord): LongInt; stdcall; // Получение установленного пользовательского MAC-адреса function E502_EthConfigGetUserMac(cfg: t_e502_eth_config_hnd; mac : t_e502_mac_addr): LongInt; stdcall; // Установка пользовательского MAC-адреса function E502_EthConfigSetUserMac(cfg: t_e502_eth_config_hnd; mac: t_e502_mac_addr): LongInt; stdcall; // Получение заводского MAC-адреса устройства function E502_EthConfigGetFactoryMac(cfg: t_e502_eth_config_hnd; mac : t_e502_mac_addr): LongInt; stdcall; // Получение установленного имени экземпляра устройства function E502_EthConfigGetInstanceName(cfg: t_e502_eth_config_hnd; out name: string): LongInt; stdcall; // Установка имени экземпляра устройства function E502_EthConfigSetInstanceName(cfg: t_e502_eth_config_hnd; const name: string): LongInt; stdcall; // Установка нового пароля для смены конфигурации function E502_EthConfigSetNewPassword(cfg: t_e502_eth_config_hnd; const new_passwd: string): LongInt; stdcall; // Перевод модуля E502 в режим загрузчика function E502_SwitchToBootloader(hnd: t_x502_hnd): LongInt; stdcall; // Перезагрузка прошивки ПЛИС function E502_ReloadFPGA(hnd: t_x502_hnd): LongInt; stdcall; // Передача управляющей команды контроллеру Cortex-M4. function E502_CortexExecCmd(hnd: t_x502_hnd; cmd_code: LongWord; par: LongWord; const snd_data : array of byte; snd_size : LongWord; rcv_data : array of byte; rcv_size : LongWord; tout: LongWord; out recvd_size: LongWord): LongInt; stdcall; // Начало сеанса поиска модулей в локальной сети function E502_EthSvcBrowseStart(out context : t_e502_eth_svc_browse_hnd; flags : LongWord): LongInt; stdcall; // Получение информации о изменении присутствия модулей в локальной сети function E502_EthSvcBrowseGetEvent(context : t_e502_eth_svc_browse_hnd; out svc: t_e502_eth_svc_record_hnd; out event: LongWord; out flags : LongWord; tout : LongWord): LongInt; stdcall; // Останов сеанса поиска модулей в локальной сети function E502_EthSvcBrowseStop(context : t_e502_eth_svc_browse_hnd): LongInt; stdcall; // Освобождение описателя сетевого сервиса function E502_EthSvcRecordFree(svc : t_e502_eth_svc_record_hnd): LongInt; stdcall; // Получить имя экземпляра по описателю сервиса function E502_EthSvcRecordGetInstanceName(svc : t_e502_eth_svc_record_hnd; out name: string): LongInt; stdcall; // Получить серийный номер модуля по описателю сетевого сервиса function E502_EthSvcRecordGetDevSerial(svc : t_e502_eth_svc_record_hnd; out serial : string): LongInt; stdcall; // Получить IP адрес сетевого сервиса function E502_EthSvcRecordResolveIPv4Addr(svc : t_e502_eth_svc_record_hnd; out addr :LongWord; tout : LongWord): LongInt; stdcall; // Проверка, указывают ли оба описателя на один экземпляр сервиса function E502_EthSvcRecordIsSameInstance(svc1 : t_e502_eth_svc_record_hnd; svc2 : t_e502_eth_svc_record_hnd): LongInt; stdcall; implementation function _get_serials( ser_arr: p_x502_serial_array; size:LongWord; flags:LongWord; out devcnt: LongWord) : LongInt; stdcall; external 'e502api.dll' name 'E502_UsbGetSerialList'; function _get_dev_records_list(out list; size:LongWord; flags : LongWord; out devcnt: LongWord) : LongInt; stdcall; external 'e502api.dll' name 'E502_UsbGetDevRecordsList'; function _open_usb(hnd: t_x502_hnd; serial: PAnsiChar) : LongInt; stdcall; external 'e502api.dll' name 'E502_OpenUsb'; function E502_OpenByIpAddr(hnd : t_x502_hnd; ip_addr: LongWord; flags : LongWord; tout: LongWord) : LongInt; stdcall; external 'e502api.dll'; function E502_MakeDevRecordByIpAddr(var devrec: t_x502_devrec; ip_addr: LongWord; flags : LongWord; tout: LongWord) : LongInt; stdcall; external 'e502api.dll'; function E502_EthDevRecordSetCmdPort(var devrec: t_x502_devrec; cmd_port: Word) : LongInt; stdcall; external 'e502api.dll'; function E502_EthDevRecordSetDataPort(var devrec: t_x502_devrec; data_port: Word) : LongInt; stdcall; external 'e502api.dll'; function E502_MakeDevRecordByEthSvc(var devrec: t_x502_devrec; svc : t_e502_eth_svc_record_hnd; flags : LongWord; tout: LongWord) : LongInt; stdcall; external 'e502api.dll'; function E502_GetIpAddr(hnd: t_x502_hnd; out ip_addr : LongWord) : LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigCreate() : t_e502_eth_config_hnd; stdcall; external 'e502api.dll'; function E502_EthConfigFree(cfg: t_e502_eth_config_hnd): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigRead(hnd: t_x502_hnd; cfg: t_e502_eth_config_hnd): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigWrite(hnd: t_x502_hnd; cfg: t_e502_eth_config_hnd; passwd : string): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigCopy(src_cfg: t_e502_eth_config_hnd; dst_cfg: t_e502_eth_config_hnd): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigGetEnabled(cfg: t_e502_eth_config_hnd; out en : LongBool): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigSetEnabled(cfg: t_e502_eth_config_hnd; en : LongBool): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigGetAutoIPEnabled(cfg: t_e502_eth_config_hnd; out en: LongBool): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigSetAutoIPEnabled(cfg: t_e502_eth_config_hnd; en: LongBool): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigGetUserMACEnabled(cfg: t_e502_eth_config_hnd; out en: LongBool): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigSetUserMACEnabled(cfg: t_e502_eth_config_hnd; en : LongBool): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigGetIPv4Addr(cfg: t_e502_eth_config_hnd; out ip_addr : LongWord): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigSetIPv4Addr(cfg: t_e502_eth_config_hnd; ip_addr: LongWord): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigGetIPv4Mask(cfg: t_e502_eth_config_hnd; out mask : LongWord): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigSetIPv4Mask(cfg: t_e502_eth_config_hnd; mask : LongWord): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigGetIPv4Gate(cfg: t_e502_eth_config_hnd; out gate: LongWord): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigSetIPv4Gate(cfg: t_e502_eth_config_hnd; gate: LongWord): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigGetUserMac(cfg: t_e502_eth_config_hnd; mac : t_e502_mac_addr): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigSetUserMac(cfg: t_e502_eth_config_hnd; mac: t_e502_mac_addr): LongInt; stdcall; external 'e502api.dll'; function E502_EthConfigGetFactoryMac(cfg: t_e502_eth_config_hnd; mac : t_e502_mac_addr): LongInt; stdcall; external 'e502api.dll'; function _eth_config_get_instance_name(cfg: t_e502_eth_config_hnd; name: PAnsiChar): LongInt; stdcall; external 'e502api.dll' name 'E502_EthConfigGetInstanceName'; function _eth_config_set_instance_name(cfg: t_e502_eth_config_hnd; name: PAnsiChar): LongInt; stdcall; external 'e502api.dll' name 'E502_EthConfigSetInstanceName'; function _eth_config_set_new_password(cfg: t_e502_eth_config_hnd; new_passwd: PAnsiChar): LongInt; stdcall; external 'e502api.dll' name 'E502_EthConfigSetNewPassword'; function E502_SwitchToBootloader(hnd: t_x502_hnd): LongInt; stdcall; external 'e502api.dll'; function E502_ReloadFPGA(hnd: t_x502_hnd): LongInt; stdcall; external 'e502api.dll'; function _cortex_exec_cmd(hnd: t_x502_hnd; cmd_code: LongWord; par: LongWord; const snd_data; snd_size : LongWord; out rcv_data; rcv_size : LongWord; tout: LongWord; out recvd_size: LongWord): LongInt; stdcall; external 'e502api.dll' name 'E502_CortexExecCmd'; function E502_EthSvcBrowseStart(out context : t_e502_eth_svc_browse_hnd; flags : LongWord): LongInt; stdcall; external 'e502api.dll'; function E502_EthSvcBrowseGetEvent(context : t_e502_eth_svc_browse_hnd; out svc: t_e502_eth_svc_record_hnd; out event: LongWord; out flags : LongWord; tout : LongWord): LongInt; stdcall; external 'e502api.dll'; function E502_EthSvcBrowseStop(context : t_e502_eth_svc_browse_hnd): LongInt; stdcall; external 'e502api.dll'; function E502_EthSvcRecordFree(svc : t_e502_eth_svc_record_hnd): LongInt; stdcall; external 'e502api.dll'; function _eth_svc_record_get_instance_name(svc : t_e502_eth_svc_record_hnd; name: PAnsiChar): LongInt; stdcall; external 'e502api.dll' name 'E502_EthSvcRecordGetInstanceName'; function _eth_svc_record_get_dev_serial(svc : t_e502_eth_svc_record_hnd; serial : PAnsiChar): LongInt; stdcall; external 'e502api.dll' name 'E502_EthSvcRecordGetDevSerial'; function E502_EthSvcRecordResolveIPv4Addr(svc : t_e502_eth_svc_record_hnd; out addr :LongWord; tout : LongWord): LongInt; stdcall; external 'e502api.dll'; function E502_EthSvcRecordIsSameInstance(svc1 : t_e502_eth_svc_record_hnd; svc2 : t_e502_eth_svc_record_hnd): LongInt; stdcall; external 'e502api.dll'; function E502_UsbGetSerialList(out serials: array of string; flags: LongWord; out devcnt: LongWord) : LongInt; overload; var ser_arr : p_x502_serial_array; res, i : LongInt; begin if (Length(serials) > 0) then begin ser_arr:=GetMemory(Length(serials)*X502_SERIAL_SIZE); // получаем количество устройтв res := _get_serials(ser_arr, Length(serials), flags, devcnt); if res >= 0 then begin //сохраняем полученные номера в динамический массив строк for i:=0 to res-1 do serials[i] := string(ser_arr[i]); end; //освобождаем память, выделенную под временный массив FreeMemory(ser_arr); end else begin res:= _get_serials(nil, 0, flags, devcnt); end; E502_UsbGetSerialList:=res; end; function E502_UsbGetSerialList(out serials: array of string; flags: LongWord) : LongInt; overload; begin E502_UsbGetSerialList:= E502_UsbGetSerialList(serials, flags, PCardinal(nil)^); end; function E502_UsbGetDevRecordsList(out list: array of t_x502_devrec; flags : LongWord; out devcnt: LongWord) : LongInt; overload; begin E502_UsbGetDevRecordsList := _get_dev_records_list(list, Length(list), flags, devcnt); end; function E502_UsbGetDevRecordsList(out list: array of t_x502_devrec; flags : LongWord) : LongInt; overload; begin E502_UsbGetDevRecordsList:= E502_UsbGetDevRecordsList(list, flags, PCardinal(nil)^); end; function E502_OpenUsb(hnd: t_x502_hnd; serial: string) : LongInt; begin E502_OpenUsb:=_open_usb(hnd, PAnsiChar(AnsiString(serial))); end; function E502_EthConfigGetInstanceName(cfg: t_e502_eth_config_hnd; out name: string): LongInt; stdcall; var strptr: PAnsiChar; res: LongInt; begin strptr:=GetMemory(X502_INSTANCE_NAME_SIZE); res:=_eth_config_get_instance_name(cfg, strptr); if res = X502_ERR_OK then name:=string(Utf8Decode(strptr)); FreeMemory(strptr); E502_EthConfigGetInstanceName:= res; end; function E502_EthConfigSetInstanceName(cfg: t_e502_eth_config_hnd; const name: string): LongInt; stdcall; begin E502_EthConfigSetInstanceName:=_eth_config_set_instance_name(cfg, PAnsiChar(Utf8Encode(AnsiString(name)))); end; function E502_EthConfigSetNewPassword(cfg: t_e502_eth_config_hnd; const new_passwd: string): LongInt; stdcall; begin E502_EthConfigSetNewPassword:=_eth_config_set_new_password(cfg, PAnsiChar(AnsiString(new_passwd))); end; function E502_CortexExecCmd(hnd: t_x502_hnd; cmd_code: LongWord; par: LongWord; const snd_data : array of byte; snd_size : LongWord; rcv_data : array of byte; rcv_size : LongWord; tout: LongWord; out recvd_size: LongWord): LongInt; stdcall; begin if (LongWord(Length(snd_data)) < snd_size) or (LongWord(Length(rcv_data)) < rcv_size) then E502_CortexExecCmd := X502_ERR_INSUFFICIENT_ARRAY_SIZE else E502_CortexExecCmd:=_cortex_exec_cmd(hnd, cmd_code, par, snd_data, snd_size, rcv_data, rcv_size, tout, recvd_size); end; function E502_EthSvcRecordGetInstanceName(svc : t_e502_eth_svc_record_hnd; out name: string): LongInt; stdcall; var strptr: PAnsiChar; res: LongInt; begin strptr:=GetMemory(X502_INSTANCE_NAME_SIZE); res:=_eth_svc_record_get_instance_name(svc, strptr); if res = X502_ERR_OK then name:=string(Utf8Decode(strptr)); FreeMemory(strptr); E502_EthSvcRecordGetInstanceName:= res; end; function E502_EthSvcRecordGetDevSerial(svc : t_e502_eth_svc_record_hnd; out serial : string): LongInt; stdcall; var strptr: PAnsiChar; res: LongInt; begin strptr:=GetMemory(X502_SERIAL_SIZE); res:=_eth_svc_record_get_dev_serial(svc, strptr); if res = X502_ERR_OK then serial:=string(strptr); FreeMemory(strptr); E502_EthSvcRecordGetDevSerial:= res; end; end.