GeoGet

Complete geocaching solutions

User Tools

Site Tools


user:skript:mtptoollib

MtpToolLib

Knihovna zajišťuje podporu pro přístup k MTP zařízením z pluginů GeoGetu.

Autor

Diskuse

Diskuse o pluginu najdete na geocaching.cz

Automatická instalace

Nainstalovat do GeoGetu
Instalaci doplňku spustíte kliknutím na tlačítko vlevo. Následně budete v prostředí GeoGetu provedeni instalačním procesem. Pro zajištění této funkce je třeba mít na počítači již nainstalovaný a spuštěný program GeoGet .
Kliknuli jste na tlačítko a nic se nestalo? Máte opravdu spuštěný GeoGet ? Je to potřeba! Nebo možná máte zastaralý webový prohlížeč. Nevadí, instalaci doplňku můžete jednoduše vyvolat i prostým zkopírováním (označit text → klik pravým tlačítkem → kopírovat) následujícího odkazu do schránky: https://www.geoget.cz/doku.php/user:skript:mtptoollib?download

Pro správnou funkci knihovny může být potřeba doinstalovat, pokud ještě v systému nejsou, volně distribuované knihovny

Popis

Protože přístup k MTP zařízením není možné ve Windows nějak jednoduše obejít pomocí příkazové řádky nebo přímo funkcemi poskytovanými systémem, vznikla tato knihovna. Instalace obsahuje soubor MtpLib.dll, který se stará o vlastní přístup k MTP zařízení, a knihovnu pro pluginy MtpToolLib.lib.pas, která dělá prostředníka mezi pluginem a DLL knihovnou.

  • všechny textové vstupní parametry nebo návratové hodnoty jsou typu unicodestring, zřejmě je možné je deklarujete i jako string
  • protože Android je v podstatě Unixový systém, všechny textové parametry jsou case sensitive (jen regulární výrazy jsou vyhodnocovány bez ohledu na velikost písmen)
  • všechny texty (např. jméno zařízení, jména souborů, …) jsou v unicode

Součástí instalace knihovny jsou:

  • MtpLib.dll - dynamická knihovna pro přímou obsluhu MTP zařízení
  • MtpToolLib.lib.pas - modul s deklarací a voláním knihovních funkcí, modul vložte do svého pluginu příkazem {$include MtpToolLib.lib.pas}
  • MtpCmd.exe - aplikace pro obsluhu MTP zařízení z příkazového řádku. Aplikace je zamýšlena zatím především pro ladění knihovny a obsahuje i funkce, které nejsou pomocí MtpToolLib.lib.pas dostupné
  • testovací plugin TestDllUse, slouží také jako ukázka použití jednotlivých funkcí

Konstanty

Pro lepší přehlednost zdrojového kódu jsou v souboru MtpToolLib.dll.pas, který je vložen do MtpToolLib.lib.pas, definované konstanty:

ML_RECURSIVE_YEStrue
ML_RECURSIVE_NOfalse
ML_REWRITE_YEStrue
ML_REWRITE_NOfalse
ML_SHOWDEVICELIST_AUTOfalse
ML_SHOWDEVICELIST_ALWAYStrue

a ještě konstanta pro definici maximální délky vráceného textu:

MAX_STRING_RESULT_LENGTH5000000

Funkce

Knihovna MtpToolLib.lib.pas obsahuje funkce exportované z dynamicky linkované knihovny MtpLib.dll. Funkce, které v MtpLib.dll pracují s bufferem, jsou pro jednodušší použití v pluginech zapouzdřeny do funkcí tak, aby rovnou vracely string. U každé funkce je uvedeno, kde je definovaná:

procedure ML_SetBufferSize(nSize:integer); //MtpToolLib.lib.pas
  • nastaví velikost bufferu pro získávání textových informací
  • implicitní velikost je cca 3 MB a měla by stačit
  • pokud některá funkce vrátí chybu -15 (např. výpis obsahu adresáře s velmi mnoha soubory), znamená to, že velikost bufferu není dostatečná. V textu chyby je zároveň uvedena minimální požadovaná velikost bufferu, kterou bude potřeba nastavit pro úspěšné provedení funkce
procedure ML_SetProgressBar(iShow:integer); //MtpToolLib.lib.pas i MtpLib.dll
  • povoluje (iShow=1) nebo potlačuje (iShow=0) zobrazování progress baru při kopírování souborů
  • implicitně je nastaveno zobrazení
  • pokud je DLL knihovna použitá v konzolové aplikaci, postup je zobrazován textově v okně aplikace
  • pokud je DLL knihovna použitá ve windowsí aplikaci, progress bar je zobrazen v samostatném okně

Verze knihovny a obsluha chyb

function ML_GetDllVersion(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll
function ML_GetDllVersion:unicodestring; //MtpToolLib.lib.pas
  • vrací verzi dll knihovny
  • číslo verze je zapsané do sBuffer, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
function ML_GetErrorCode:integer;
  • vrací číslo chyby, ke které došlo při posledním použití některé knihovní funkce
  • 0 znamená bez chyby
function ML_GetErrorMessage(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll
function ML_GetErrorMessage:unicodestring; //MtpToolLib.lib.pas
  • vrací text chyby, resp. počet znaků textu chyby, ke které došlo při posledním použití některé knihovní funkce
  • text chyby je zapsaný do sBuffer, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
  • pokud je vrácený text prázdný, k chybě nedošlo

Práce s MTP zařízením jako takovým

function ML_Devices(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll
function ML_Devices(sBuffer:unicodestring; iMaxBufferLen:integer):unicodestring; //MtpToolLib.lib.pas
  • vrací seznam připojených zařízení resp. počet znaků seznamu zařízení připojených k PC
  • seznam je zapsaný do sBuffer, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
  • oddělovačem zařízení je CRLF
  • v seznamu jsou i “pevné” šachty čtečky karet
procedure ML_SetDeviceName(sName:unicodestring);
  • funkce nastavuje jméno zařízení, s kterým budou pracovat funkce, které pracují s konkrétním zařízením
function ML_DeviceInfo(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll
function ML_DeviceInfo:unicodestring; //MtpToolLib.lib.pas
  • vrací vlastnosti zařízení, resp. počet znaků všech vlastností zařízení zadaného funkcí ML_SetDeviceName
  • seznam vlastností je zapsaný do sBuffer, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
  • oddělovačem vlastností je CRLF
  • prázdný seznam může znamenat chybu
function ML_SupportedCommands(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll
function ML_SupportedCommands:unicodestring; //MtpToolLib.lib.pas
  • vrací počet znaků všech podporovaných příkazů v zařízení zadaném funkcí ML_SetDeviceName
  • seznam příkazů je zapsaný do sBuffer, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
  • oddělovačem kategorií je CRLF
  • seznam je řazen po kategoriích příkazů a jsou v něm jen ty kategorie, které obsahují alespoň jeden podporovaný příkaz
  • prázdný seznam může znamenat chybu
function ML_FunctionalObjects(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll
function ML_FunctionalObjects:unicodestring; //MtpToolLib.lib.pas
  • vrací počet znaků všech funkčních objektů pro všechny podporované funkční kategorie zařízení zadaného funkcí ML_SetDeviceName
  • seznam podporovaných funkčních kategorií je zapsaný do sBuffer, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
  • každý řádek seznamu začíná identifikací kategorie, dvojtečkou a pak následuje čárkou oddělovaný seznam jmen funkčních objektů dané kategorie
  • prázdný seznam může znamenat chybu
function ML_ContentTypes(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll
function ML_ContentTypes():unicodestring; //MtpToolLib.lib.pas
  • vrací počet znaků seznamu podporovaných typů obsahu zařízení zadaného funkcí ML_SetDeviceName
  • seznam podporovaných typů je zapsaný do sBuffer, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
  • oddělovačem typů je CRLF
  • prázdný seznam může znamenat chybu
function ML_FindGpsMobilDevice(sType:string: bAlwaysShowList:boolean):string; //MtpToolLib.lib.pas
  • poněkud komplexní funkce, která hledá mezi připojenými zařízeními GPS nebo Android s aplikaci a:Drake
  • prohledává nejen MTP zařízení, ale i standardní disky, …
  • pokud najde více zařízení podle požadavku sType, nechá uživatele vybrat jedno z nich a vrací to vybrané
  • sType je požadavek, co má funkce hledat
    • GARMIN - hledá jen GPS Garmin připojenou jako standardní disk
    • ADRAKE_INST - hledá zařízení (disk i MTP) s instalovaným a:Drake a vrací cestu k instalovaným souborům (aDrake.ini)
    • ADRAKE_DB - hledá zařízení (disk i MTP) s instalovaným a:Drake a vrací cestu a jméno databázového souboru, který aplikace používá
    • ALL_APPS - hledá všechny výše uvedené aplikace (kombinuje všechny výše jmenované parametry)
    • ALL_DEVS - nechá uživatele vybrat ze všech připojených zařízení bez ohledu na to, zda obsahují instalaci nějaké aplikace
  • druhý parametr bAlwaysShowList, pokud je nastaven na true, přikazuje zobrazit okno s výběrem zařízení vždy, ne jen když je nalezených zařízení více
  • vrácený string obsahuje na jméno zařízení, dvojtečku, cestu a v hranatých závorkách typ, např.:
    • K: [GARMIN] - GPS Garmin připojená přes USB jako Mass Storage
    • K:\adrake [ADRAKE_INST] - telefon se starším Androidem připojený přes USB jako Mass Storage, a:Drake instalovaný v rootu (telefonu nebo karty, to se nepozná)
    • K:\Tmp\geoget.db3 [ADRAKE_DB] - telefon se starším Androidem připojený přes USB, instalovaný a:Drake používá tento databázový soubor
    • LG Spirit LTE: Interní úložiště/Android/data/cz.adrake/files [ADRAKE_INST] - telefon s Androidem připojeným jako MTP, instalované soubory aplikace jsou v tomto adresáři
    • LG Spirit LTE: Karta SD/Android/data/cz.adrake/files/geoget.db3 [ADRAKE_DB] - telefon s Androidem připojeným jako MTP, instalovaný a:Drake používá tento databázový soubor
    • LG Spirit LTE - vrácený text neobsahuje nic než jméno uživatelem vybraného zařízení protože funkce byla spuštěna s parametrem ALL a uživatel toto zařízení vybral (nebo jiné připojené zařízení neexistuje)

Práce se soubory nebo adresáři

function ML_Exists(sPath:unicodestring):integer;
  • funkce vrací 1, pokud existuje objekt (adresář, soubor, karta, …) zadaný cestou sPath
  • sPath se hledá v zařízení zadaném funkcí ML_SetDeviceName
  • vrácená hodnota 0 (false) může znamenat i chybu
function ML_Properties(sPath:unicodestring; sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll
function ML_Properties(sPath:unicodestring):unicodestring; //MtpToolLib.lib.pas
  • vrací vlastnosti resp. počet znaků všech vlastností objektu (soubor, adresář, karta, …) zadaného cestou sPath; cesta se hledá v zařízení zadané funkcí ML_SetDeviceName
  • seznam vlastností je zapsaný do sBuffer, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
  • oddělovačem vlastností je CRLF
  • prázdný seznam může znamenat chybu

Práce s adresáři

function ML_Dir(sPath:unicodestring; sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll
function ML_Dir(sPath:unicodestring):unicodestring; //MtpToolLib.lib.pas
  • vrací seznam položek resp. počet znaků seznamu položek (soubory, adresáře) v adresáři zadaném cestou sPath; cesta se hledá v zařízení zadané funkcí ML_SetDeviceName
  • seznam položek je zapsaný do sBuffer, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
  • pokud je vrácená délka shodná s iMaxBufferLen, pravděpodobně se celý seznam nevešel do sBuffer
  • oddělovačem položek adresáře je CRLF
  • adresáře jsou v seznamu ukončeny znakem /
  • prázdný seznam může znamenat chybu
function ML_MkDir(sPathDir:unicodestring; bRecursively:integer):integer;
  • funkce v zařízení zadaném funkcí ML_SetDeviceName vytváří adresář sPathDir
  • nenulová hodnota bRecursively povoluje vytvořit postupně adresáře celé uvedené cesty
  • vrácená hodnota 0 znamená bez chyby
function ML_RmDir(sPathDir:unicodestring; bRecursively:integer):integer;
  • funkce v zařízení zadaném funkcí ML_SetDeviceName smaže prázdný adresář sPathDir
  • bRecursively=1 znamená mazání včetně všech vnořených souborů a adresářů
  • vrácená hodnota 0 znamená bez chyby
function ML_GetDir(sSrcDir, sMask, sTrgDir:unicodestring; bRecursively, bOverwrite:integer):integer;
  • funkce ze zařízení zadaném funkcí ML_SetDeviceName získá obsah adresáře sSrcDir a zapíše jej do adresáře sTrgDir
    • adresář se jménem sTrgDir není v PC vytvářen, sTrgDir musí již existovat, kopíruje se jen obsah sSrcDir (případně včetně vnořených adresářů a jejich obsahu)
  • sMask je maska souborů a adresářů, s kterými funkce pracuje; je možné používat zástupných znaků * nebo ? (např. *.bmp, obr_?.jpg, obr*.png, obr* a podobně)
    • prázdná maska znamená všechny soubory (a adresáře při bRecursively=1)
  • bRecursively=1 znamená kopírování včetně vnořených adresářů
    • ovšem pokud je zadaná maska sMask, jsou brány v úvahu jen adresáře, jejichž jméno také odpovídá zadané masce
  • bOverwrite=1 povoluje “přepis” existujících souborů/adresářů
  • vrácená hodnota 0 znamená bez chyby
function ML_PutDir(sSrcDir, sMask, sTrgDir:unicodestring; bRecursively, bOverwrite:integer):integer;
  • funkce do zařízení zadaném funkcí ML_SetDeviceName a do adresáře sTrgDir zkopíruje obsah adresáře sSrcDir z PC
    • adresář se jménem sTrgDir není v MTP zařízení vytvářen, musí již existovat, kopíruje se jen obsah a sSrcDir (případně včetně vnořených adresářů a jejich obsahu)
  • sMask je maska souborů a adresářů, s kterými funkce pracuje; je možné používat zástupných znaků * nebo ? (např. *.bmp, obr_?.jpg, obr*.png, obr* a podobně)
    • prázdná maska znamená všechny soubory (a adresáře při bRecursively=1)
  • bRecursively=1 znamená kopírování včetně vnořených adresářů
    • ovšem pokud je zadaná maska sMask, jsou brány v úvahu jen adresáře, jejichž jméno také odpovídá zadané masce
  • bOverwrite=1 povoluje “přepis” existujících souborů/adresářů
  • vrácená hodnota 0 znamená bez chyby

Práce se soubory

function ML_GetFile(sSrc,sTrg:unicodestring):integer;
  • funkce kopíruje soubor ze zařízení do PC
  • sSrc se hledá v zařízení zadaném funkcí ML_SetDeviceName
  • vrácená hodnota 0 znamená bez chyby
function ML_PutFile(sSrc,sTrgDir:unicodestring; bOverwrite:integer):integer;
  • funkce kopíruje soubor z PC do zařízení do PC
  • cílový adresář sTrdDir se hledá v zařízení zadaném funkcí ML_SetDeviceName
  • vrácená hodnota 0 znamená bez chyby
function ML_DeleteFile(sPath:unicodestring):integer;
  • funkce smaže soubor na zařízení zadaném funkcí ML_SetDeviceName
  • vrácená hodnota 0 znamená bez chyby
function ML_RenameFile(sSrcPath,sTrgName:unicodestring):integer;
  • funkce přejmenuje soubor v zařízení zadaném funkcí ML_SetDeviceName
  • vrácená hodnota 0 znamená bez chyby
  • protože jméno souboru je jedna z jeho vlastností, bude funkce úspěšná jen v tom případě, že soubor má povolen přepis vlastností. To v drtivé většině případů neplatí

Vyhledání zařízení

function ML_FindGpsMobileDevice(sType:string; bAlwaysShowSelection:boolean):string;
  • funkce se pokusí najít požadované připojené zařízení a vrací jeho jméno (případně celou cestu)
  • požadované zařízení specifikuje první parametr:
    • GARMIN - GPS Garmin
    • ADRAKE_INST - funkce vrací adresář s instalovanou aplikací a:Drake (tedy místo, kde je její ini soubor)
    • ADRAKE_DB - funkce vrací adresář s databází, kterou aktuálně používá instalovaná aplikace a:Drake (funkce napřed vyhledá ADRAKE_INST a pak z INI souboru zjistí používanou databázi)
    • LOCUS_INST, LOCUS_DB - není možné vyhledávat, protože konfigurace je uložena v XML souboru čitelném jen pod root. Addon může mít databázi úplně kdekoli bez ohledu na možnost zápisu, protože právě kvůli tomu je stále ještě kompilovaný pro starší Androidy
    • ALL_APPS - hledá všechny výše jmenované možnosti a ve vráceném stringu je na každém řádku vždy typ a nalezená cesta
  • druhý parametr umožňuje zobrazit uživateli nalezený seznam a nechat jej vybrat požadovanou volbu, která je pak funkcí vrácena
    • při hodnotě false je uživateli výběr k volbě zobrazen jen v tom případě, že je nalezeno více požadavku odpovídajících položek (např. a:Drake na více současně připojených telefonech a funkce nemůže rozhodnout, který z telefonů si uživatel přeje použít)
    • při hodnotě true je výběr uživateli zobrazen vždy, i v případě, kdy by funkce rozhodnout mohla, protože bylo nalezeno jen jediné zařízení

Ukázka použití knihovny

{$include MtpToolLib.lib.pas}
...
  sHtml:='<pre>Seznam připojených zařízení: '+ReplaceString(Trim(ML_Devices()),CRLF,', ')+CRLF;
  sHtml:=sHtml+CRLF+'Zařízení: LG Spirit LTE'+CRLF;
 
  ML_SetDeviceName('LG Spirit LTE');
  sHtml:=sHtml+'Vlastnosti zařízení: '+CRLF+Trim(ML_DeviceInfo())+CRLF;
  sHtml:=sHtml+'Seznam podporovaných typu obsahu: '+ReplaceString(Trim(ML_ContentTypes()),CRLF,', ')+CRLF;
  sHtml:=sHtml+'Seznam podporovaných funkčních typů: '+ReplaceString(Trim(ML_FunctionalTypes()),CRLF,', ')+CRLF;
  sHtml:=sHtml+'Seznam funkčních objektů: '+ReplaceString(Trim(ML_FunctionalObjects()),CRLF,', ')+CRLF;
  sHtml:=sHtml+'Vlastnosti objektu /Karta SD/Android: '+CRLF+Trim(ML_Properties('/Karta SD/Android'))+CRLF;
  sHtml:=sHtml+'Obsah adresáře /Karta SD: '+CRLF+Trim(ML_Dir('/Karta SD'))+CRLF;
 
//funkce vracejici int (jako priznak uspesnosti)
  sHtml:=sHtml+'Test existence /Karta SD: '+IntToStr(ML_Exists('/Karta SD'))+CRLF;
  sHtml:=sHtml+'Test existence /Karta SD/Abcd: '+IntToStr(ML_Exists('/Karta SD/Abcd'))+CRLF;
  sHtml:=sHtml+'Poslední chyba: '+ML_GetMessageError()+CRLF;
 
  sHtml:=sHtml+'</pre>';
  ShowHTMLMessageSize('Test MtpToolLib', sHtml, 600, 600);
...

Ukázka použití funkce FindGpsMobilDevice('ALL_APPS'), funkce nabízí uživateli volbu ze všech nalezených zařízení s “aplikacemi”. Vybranou volbu pak předá jako návratovou hodnotu. Pokud je nalezeno jen jedno zařízení, uživatele se neptá na nic.

Ukázka výběru z více nalezených zařízení

TestDllUse

Součástí instalace je plugin TestDllUse.ggp.pas, který má ověřit práci s Vaším zařízením a autorům pluginů ukázat použití většiny funkcí knihovny. Na začátku metody PluginStart je definice adresářů a jmen souborů, s kterými se pracuje, to si upravte. Pak můžete plugin spustit a výsledek uvidíte v zobrazeném výpisu. Pokud nedojde k žádné chybě, mělo by se udělat:

  • vypíše seznam připojených zařízení a nechá vybrat jedno z nich. Pokud během zobrazení seznamu připojíte nebo odpojíte nějaké MTP zařízení, tlačítkem Refresh je možné seznam aktualizovat (ML_FindGpsMobileDevice('ALL_DEVS', true); a ML_SetDeviceName();)
  • vypíše vlastnosti zvoleného zařízení (ML_DeviceInfo();)
  • vypíše seznam funkčních kategorií, které zařízení podporuje (ML_FunctionalCategories();)
  • vypíše seznam všech funkčních objektů v zařízení (ML_FunctionalObjects();) a najde mezi nimi SD kartu (pokud neexistuje, použije v dalších krocích paměť telefonu)
  • vypíše seznam podporovaných typů obsahu (ML_ContentTypes();)
  • otestuje existenci pracovních adresářů (ML_Exists();)
  • vypíše vlastnosti jednoho adresáře (ten je víceméně natvrdo) (ML_Properties();)
  • vytvoří testovací soubor na PC
  • otestuje existenci 3 adresářů (2 by měly existovat, jeden ne) (ML_Exists();)
  • vytvoří v zařízení rekurzivně 2 úrovně testovacích adresářů (ML_MkDir();)
  • vypíše vlastnosti nejnižšího vytvořeného adresáře (ten je víceméně natvrdo) (ML_Properties();)
  • do nejnižšího adresáře zkopíruje testovací soubor (ML_PutFile();)
  • na PC změní obsah testovacího souboru a znovu jej zkopíruje do zařízení, čímž otestuje přepsání existujícího souboru
  • zkopíruje testovací soubor s novým obsahem zpět do PC, ale pod novým jménem (ML_PutFile();)
  • vypíše vlastnosti zkopírovaného souboru v zařízení (ML_Properties();)
  • testovací soubor překopíruje do PC pod jiným jménem (ML_GetFile();)
  • vypíše obsah adresáře (ML_Dir();)
  • soubor v telefonu smaže (ML_DeleteFile();)
  • rekurzivně smaže v telefonu vytvořené pracovní adresáře (ML_RmDir();)

Známé potíže

* Could not call proc

  • pokud při spuštění napíše GeoGet něco takovéhoto:
[Script Runtime Error]: GgDrake.ggp.pas
Could not call proc
Routine: BUTREFRESHONCLICK''

* zaseknutí

  • občas se “MTP” na chvíli (třeba i minutu) zasekne a jakoby nic nedělá, ale pak se normálně rozjede. Podobné chování ale pozoruji i při propojeni přes Total Commander nebo i Windowsím průzkumníkem. Tak to asi budu chápat jako vlastnost
  • smazání souboru někdy trvá neúměrně dlouho, netuším proč, možná to souvisí s předchozím bodem, možná je to proto, že se prověřuje, zda soubor nepoužívá nějaká aplikace a přes MTP driver to trvá dlouho (ale pak je divné, proč je to někdy rychle)

* jméno souboru nebo adresáře

  • zdá se, že žádný soubor v MTP nemá nastaven příznak umožňující přepis atributů souboru
  • proto se nepodaří nikdy soubor přejmenovat (ale smazat jej většinou možné je!)
  • proto při zápisu souboru do MTP zařízení, pokud soubor existuje, není možné soubor jednoduše přepsat, ale soubor stejného jména je napřed vymazán a pak zkopírován jako nový soubor (má tedy jiné ID než původní soubor)
  • ačkoli telefon vrací vždy všechny texty v unicode kódování, nastane pravděpodobně problém v případě, kdy Windows a telefon nebudou obsahovat stejnou lokalizaci nebo znakovou sadu. Např. v případě, kdy Windows budou anglické, těžko knihovně sdělíte, že potřebujete soubor z/do Interní úložiště, jak je v telefonu s českou lokalizací nazvané paměť v telefonu mimo výměnnou SD kartu

* datum, čas

  • při kopírování souborů nebo adresářů do MTP zařízení sice nastavuji datum vytvoření a aktualizace souboru nebo adresáře, ale zdá se, že MTP driver v zařízeních některých výrobců má vlastní hlavu a vždy nastavují aktuální datum a čas bez ohledu na atributy nastavené při vytváření. Díky předcházejícímu bodu ani není možné později nastavit tato časová razítka správně a případné synchronizace souborů je přinejmenším sporná

* aktualizace DLL knihovny

  • při použití pluginu je do paměti zavedena DLL knihovna MtpLib.dll, která dál používá několik systémových DLL knihoven. Po ukončení pluginu však nedojde k uvolnění systémových knihoven z paměti, proto je knihovna MtpLib.dll uzamčena proti manipulaci a není tedy možné plugin aktualizovat - knihovnu se nepodaří přepsat novou verzí. Je nutné napřed restartovat GeoGet, tím dojde k odblokování knihovny a aktualizace pluginu proběhne správně

Seznam skriptů, které používají tuto knihovnu

PageDateDescriptionTags
Combine2022/04/18 20:47Combine Skript slouží k automatizaci často opakovaného sledu akcí. Vytvořením dávky složené z několika postupných kroků zjednodušuje provádění složitějších čin…, , , , , , ,
GgDrake2022/10/18 16:11GgDrake Plugin je určen pro předávání dat mezi GeoGetem a aplikací a:Drake pro mobilní telefony se systémem Android. Autor Gord, Gord LudekV autor a:Draku …, , , , ,

Pokud jste narazili na skript, který knihovnu používá, ale není zde uveden, kontaktujte, prosím, autory.

Stažení

Stáhnout aktuální verzi: mtptoollib-1.0.1.gip

Seznam dostupných verzí

FilenameFilesizeLast modified
mtptoollib-1.0.1.gip224.4 KiB2018/04/06 14:18
mtptoollib-1.0.0.gip222.1 KiB2017/02/01 07:58
combine-2.0.14.25.gip117.1 KiB2016/11/11 00:00

Zde uvedená verze Combine je rozšířená o funkce pro MTP zařízení. Jde rovněž o betaverzi, proto není dostupná na stránce pluginu Combine, ale jen zde. Součástí instalace je ukázková dávka pro “bezpečné” zkopírování databáze do a:Drake. Při kopírování dávka vyhledá připojené zařízení s instalací a:Drake, podle jeho INI souboru najde adresář a databázi, kterou a:Drake používá, zkontroluje, zda kopírovaná databáze z GeoGetu má stejné jméno, databázi zkopíruje a vymaže žurnálový soubor.

Seznam změn

1.0.1 (6.4.2018)

  • MtpCmd.exe
    • nový: soubor s popisem s funkcemi a příklady spouštění z příkazového řádku
  • MtpToolLib.dll.pas
    • oprava: Refresh přidával k seznamu nalezených zařízení místo aby v seznamu byly jen nově/opakovaně nalezené
    • oprava: nalezení ADRAKE_INST a ADRAKE_DB hledá i pro a:Drake Plus a také staré umístění v /adrake

1.0.0 (1.2.2017)

  • MtpCmd.exe, MtpLib.dll, TestDllUse.ggp.pas
    • oprava: snad definitivní umravnění nemizejícího progress baru

:!: Zobrazit změny ve starších verzích

Skrýt změny ve starších verzích

0.9.9 (26.1.2017)

  • MtpCmd.exe, MtpLib.dll, TestDllUse.ggp.pas
    • nový: při kopírování je zobrazen postup kopírování s procenty a odhadovaným časem do konce
    • změna: všechny stringy jsou unicode
    • změna: u funkčních objektů určených pro ukládání dat je doplněn výčet vlastností o jim specifické

0.7.7 (17.11.2016)

  • MtpCmd.exe, MtpLib.dll
    • oprava: práce se zařízením, které nemá jméno
    • změna: trochu jsem učesal výpisy (i v TestUseDll.ggp.pas)
    • změna: doplněna funkce pro výpis vlastností objektů pro ukládání dat (SD karty, …)

0.7.5 (11.11.2016)

  • úvodní beta verze
user/skript/mtptoollib.txt · Last modified: 2021/05/02 19:06 by mikrom