/******************************************************************* * Pilot Software * * Copyright (c) 1995-1997, Palm Computing Inc., All Rights Reserved * *------------------------------------------------------------------- * FileName: * DLCommon.h * * Description: * Desktop Link Protocol(DLP) function id's, parameters, and frame * structures. * * History: * 6/7/95 vmk Created by Vitaly Marty Kruglikov * 6/15/95 vmk Changed dlp/Read/Write/UserID to dlp/Read/Write/UserInfo and * added the last sync PC id field to their arguments at Laura's request. * 6/15/95 vmk Added option to dlpDeleteRecord to delete all records in DB. * *******************************************************************/ #ifndef __DLCOMMON_H__ #define __DLCOMMON_H__ /************************************************************ * DesktopLink function codes *************************************************************/ // DlpFuncID -- function id's used in request blocks sent to // the DesktopLink application on Pilot. The width of the function // id base is 7 bits. The high order bit(the 8th bit) is used to // distinguish requests from their responses -- it is cleared in request // blocks and is set in response blocks (i.e., the response to a particular // command will have the same function code base as the command and the // high order bit set). See dlpFuncRespFlag defined below. // typedef enum DlpFuncID { dlpReservedFunc = 0x0F, // range reserved for internal use // DL 1.0 FUNCTIONS START HERE dlpReadUserInfo, dlpWriteUserInfo, dlpReadSysInfo, dlpGetSysDateTime, dlpSetSysDateTime, dlpReadStorageInfo, dlpReadDBList, dlpOpenDB, dlpCreateDB, dlpCloseDB, dlpDeleteDB, dlpReadAppBlock, dlpWriteAppBlock, dlpReadSortBlock, dlpWriteSortBlock, dlpReadNextModifiedRec, dlpReadRecord, dlpWriteRecord, dlpDeleteRecord, dlpReadResource, dlpWriteResource, dlpDeleteResource, dlpCleanUpDatabase, dlpResetSyncFlags, dlpCallApplication, dlpResetSystem, dlpAddSyncLogEntry, dlpReadOpenDBInfo, dlpMoveCategory, dlpProcessRPC, // remote procedure calls interface dlpOpenConduit, // this command is sent before each conduit is opened dlpEndOfSync, // ends the sync session dlpResetRecordIndex, // resets "modified record" index dlpReadRecordIDList, // LAST 1.0 FUNCTION // DL 1.1 FUNCTIONS ADDED HERE (Pilot 2.0 Personal, ROM-A) dlpReadNextRecInCategory, dlpReadNextModifiedRecInCategory, dlpReadAppPreference, dlpWriteAppPreference, dlpReadNetSyncInfo, dlpWriteNetSyncInfo, dlpReadFeature, dlpLastFunc // ***ALWAYS KEEP LAST*** } DlpFuncID; #define dlpLastPilotV10FuncID dlpReadRecordIDList // Desktop Link function error codes returned in the response errorCode // field. typedef enum DlpRespErrorCode { dlpRespErrNone = 0, // reserve 0 for no error dlpRespErrSystem, // general Pilot system error dlpRespErrIllegalReq, // unknown function ID dlpRespErrMemory, // insufficient dynamic heap memory dlpRespErrParam, // invalid parameter dlpRespErrNotFound, // database, record, or resource not found dlpRespErrNoneOpen, // there are no open databases dlpRespErrDatabaseOpen, // database is open by someone else dlpRespErrTooManyOpenDatabases, // there are too many open databases dlpRespErrAlreadyExists, // DB already exists dlpRespErrCantOpen, // couldn't open DB dlpRespErrRecordDeleted, // record is deleted dlpRespErrRecordBusy, // record is in use by someone else dlpRespErrNotSupported, // the requested operation is not supported // on the given database type(record or resource) dlpRespErrUnused1, // was dlpRespErrROMBased dlpRespErrReadOnly, // caller does not have write access(or DB is in ROM) dlpRespErrNotEnoughSpace, // not enough space in data store for record/resource/etc. dlpRespErrLimitExceeded, // size limit exceeded dlpRespErrCancelSync, // cancel the sync dlpRespErrBadWrapper, // bad arg wrapper(for debugging) dlpRespErrArgMissing, // required arg not found(for debugging) dlpRespErrArgSize, // invalid argument size dlpRespErrLastReserved = 127 // last error code reserved for Palm // *KEEP THIS ENTRY LAST* } DlpRespErrorCode; // Database flags // NOTE: THESE *MUST* MATCH THE TOUCHDOWN DB ATTRIBUTES(AT LEAST IN THE FIRST VERSION). // ANY CHANGES MUST BE REFLECTED IN "READ DB LIST" AND #define dlpDBFlagResDB 0x0001 // resource DB if set; record DB if cleared #define dlpDBFlagReadOnly 0x0002 // DB is read only if set; read/write if cleared #define dlpDBFlagAppInfoDirty 0x0004 // Set if Application Info block is dirty // Optionally supported by an App's conduit #define dlpDBFlagBackup 0x0008 // Set if database should be backed up to PC if // no app-specific synchronization conduit has // been supplied. #define dlpDBFlagOKToInstallNewer 0x0010 // This tells the backup conduit that it's OK // for it to install a newer version of this database // with a different name if the current database is // open. This mechanism is used to update the // Graffiti Shortcuts database, for example. #define dlpDBFlagResetAfterInstall 0x0020 // Device requires a reset after this database is // installed. #define dlpDBFlagOpen 0x8000 // DB is open // Database record attributes #define dlpRecAttrDeleted 0x80 // delete this record next sync #define dlpRecAttrDirty 0x40 // archive this record next sync #define dlpRecAttrBusy 0x20 // record currently in use #define dlpRecAttrSecret 0x10 // "secret" record - password protected #define dlpRecAttrArchived 0x08 // archived record // Date/time will be described in the following format // yr(2 bytes), mo(1 byte, 1-12), dy(1 byte, 1-31), // hr(1 byte, 0-23), min(1 byte, 0-59), sec(1 byte, 0-59), // unused(1 byte). typedef struct DlpDateTimeType { // OFFSET Word year; // 0; year (high, low) Byte month; // 2; month: 1-12 Byte day; // 3; day: 1-31 Byte hour; // 4; hour: 0-23 Byte minute; // 5; minute: 0-59 Byte second; // 6; second: 0-59 Byte unused; // 7; unused -- set to null! } DlpDateTimeType; // TOTAL: 8 bytes /************************************************************ * Request and Response headers. * * Each DLP request and response data block begins with the * corresponding header structure which identifies the function * id, argument count, and error code(responses only). *************************************************************/ // Request header: // typedef struct DlpReqHeaderType { // OFFSET Byte id; // 0; request function ID Byte argc; // 2; count of args that follow this header // TOTAL: 2 bytes } DlpReqHeaderType; typedef DlpReqHeaderType* DlpReqHeaderPtr; typedef struct DlpReqType { // OFFSET DlpReqHeaderType header; // 0; request header // FIXED SIZE: 2 bytes Byte args[1]; // 2; request arguments -- var size } DlpReqType; typedef DlpReqType* DlpReqPtr; // Response header: // typedef struct DlpRespHeaderType { // OFFSET Byte id; // 0; response function ID Byte argc; // 1; count of arguments that follow this header Word errorCode; // 2; error code // TOTAL: 4 bytes } DlpRespHeaderType; typedef DlpRespHeaderType* DlpRespHeaderPtr; typedef struct DlpRespType { // OFFSET DlpRespHeaderType header; // 0; response header // FIXED SIZE: 4 bytes Byte args[1]; // 4; response arguments -- var size } DlpRespType; typedef DlpRespType* DlpRespPtr; // Generic request/response body type(for utility routines) // typedef union DlpGenericBodyType { Byte id; // request/response id DlpReqType req; // request body DlpRespType resp; // response body } DlpGenericBodyType; typedef DlpGenericBodyType* DlpGenericBodyPtr; // dlpFuncRespFlag is used to form a function response ID from a // function ID by or'ing it with the function ID. For example: if // dlpFuncDeleteResource is the request ID, the correct response ID // must be (dlpFuncDeleteResource | dlpFuncRespFlag). // #define dlpFuncRespFlag 0x80 // dlpFuncIDMask is used to mask out the function ID value #define dlpFuncIDMask 0x7f // dlpFirstArgID is the value of the first argument ID to be defined for // functions. Values below it are reserved. // #define dlpFirstArgID 0x20 /************************************************************ * * Argument headers used to "wrap" request and response arguments * * IMPORTANT: ARGUMENT WRAPPERS IN REQUESTS AND RESPONSES MUST * ALWAYS START ON AN EVEN-BYTE BOUNDARY. The server * implementation expects this to be the case. * *************************************************************/ // dlpSmallArgFlag is used to identify "small" argument wrappers by // or'ing it with the argument id in argument header. // #define dlpSmallArgFlag 0x080 // dlpShortArgIDMask is used to mask out the argument id value // #define dlpShortArgIDMask 0x7F // dlpLongArgFlag is used to identify "long" argument wrappers by // or'ing it with the argument id in argument header. // #define dlpLongArgFlag 0xC000 // dlpLongArgIDMask is used to mask out the argument id value // #define dlpLongArgIDMask 0x3FFF //------------------------------------------------------------------------- // Short argument wrappers (v1.0-compatible) //------------------------------------------------------------------------- // Maximum short argument size which can be "wrapped" #define dlpMaxTinyArgSize 0x000000FFL #define dlpMaxSmallArgSize 0x0000FFFFL #define dlpMaxShortArgSize dlpMaxSmallArgSize // Tiny argument header for data sizes up to 255 bytes(optimization) // typedef struct DlpTinyArgWrapperType { // OFFSET Byte bID; // 0; argument ID Byte bSize; // 1; argument size (does NOT include this arg header) // TOTAL: 2 bytes } DlpTinyArgWrapperType; typedef struct DlpTinyArgType { DlpTinyArgWrapperType wrapper; // 0; argument header Byte data[1]; // 2; argument data -- var size } DlpTinyArgType; // Small argument header for data sizes above 255 bytes(*may also be used for // smaller arguments when convenient*) // typedef struct DlpSmallArgWrapperType { // OFFSET Byte bID; // 0; argument ID Byte unused; // 1; unused(for alignment) -- set to null! Word wSize; // 2; argument size (does NOT include this arg header) // TOTAL: 4 bytes } DlpSmallArgWrapperType; typedef struct DlpSmallArgType { DlpSmallArgWrapperType wrapper; // 0; argument header Byte data[1]; // 4; argument data -- var size } DlpSmallArgType; // Unions of short argument types typedef union DlpShortArgWrapperType { Byte bID; // arg id DlpTinyArgWrapperType tiny; // "tiny" arg wrapper DlpSmallArgWrapperType small;// "tiny" arg wrapper } DlpShortArgWrapperType; typedef DlpShortArgWrapperType* DlpShortArgWrapperPtr; typedef union DlpShortArgType { Byte bID; // arg id DlpTinyArgType tiny; // "tiny" arg DlpSmallArgType small; // "small" arg } DlpShortArgType; typedef DlpShortArgType* DlpShortArgPtr; //------------------------------------------------------------------------- // Long argument wrapper (v2.0 extension) //------------------------------------------------------------------------- // NOTE: Pilot v2.0 will implement the capability to parse long arguments // but will not originate them. This will assure backwards compatibility with // the 1.0 desktop as well as compatibility with the future version of the // desktop software which may originate the "long" argument wrappers. // // Long argument wrappers are identified by the dlpLongArgFlag bits set // in the argument id field. // Maximum long argument size which can be "wrapped" #define dlpMaxLongArgSize 0xFFFFFFFFL typedef struct DlpLongArgWrapperType { // OFFSET Word wID; // 0; argument ID DWord dwSize; // 2; argument size (does NOT include this arg header) // TOTAL: 6 bytes } DlpLongArgWrapperType; typedef DlpLongArgWrapperType* DlpLongArgWrapperPtr; typedef struct DlpLongArgType { // OFFSET DlpLongArgWrapperType wrapper; // 0; argument header Byte data[1]; // 6; argument data -- var size } DlpLongArgType; typedef DlpLongArgType* DlpLongArgPtr; //------------------------------------------------------------------------- // Unions of all argument and wrapper types //------------------------------------------------------------------------- // Union of all argument wrapper types typedef union DlpGenericArgWrapperType { DlpShortArgWrapperType shortWrap; // "short" arg wrapper(tiny and small) DlpLongArgWrapperType longWrap; // "long" arg wrapper } DlpGenericArgWrapperType; typedef DlpGenericArgWrapperType* DlpGenericArgWrapperPtr; // Union of all argument types typedef union DlpGenericArgType { DlpShortArgType shortArg; // "short" arg(tiny and small) DlpLongArgType longArg; // "long" arg } DlpGenericArgType; typedef DlpGenericArgType* DlpGenericArgPtr; /******************************************************************** * Desktop Link Protocol Parameters ********************************************************************/ // dlpCmdTimeoutSec -- this is the number of seconds to wait for a command // to begin coming in before timing out // #define dlpCmdTimeoutSec 30 /************************************************************ * DLP function argument structures *************************************************************/ ////////////////////////////////////////////////////////////////////////// // dlpReadUserInfo ////////////////////////////////////////////////////////////////////////// // Request arguments: none // // Response arguments: // // Possible error codes // dlpRespErrSystem, // dlpRespErrMemory // Request argument structure: // // none. // Response argument structure: // #define dlpReadUserInfoRespArgID dlpFirstArgID typedef struct DlpReadUserInfoRespHdrType { // OFFSET DWord userID; // 0; user ID number (0 if none) DWord viewerID; // 4; id assigned to viewer by the desktop DWord lastSyncPC; // 8; last sync PC id (0 if none) DlpDateTimeType succSyncDate; // 12; last successful sync (year = 0 if none) DlpDateTimeType lastSyncDate; // 20; last sync date(year = 0 if none) Byte userNameLen; // 28; length of user name field, // including null (0 = no user name) Byte passwordLen; // 29; length of encrypted password // (0 = no password set) // TOTAL: 30 bytes } DlpReadUserInfoRespHdrType; typedef struct DlpReadUserInfoRespType { // OFFSET DlpReadUserInfoRespHdrType // header; // 0; fixed-size header // FIXED SIZE: 30 bytes Byte nameAndPassword[1]; // 30; user name -- var size // User name begins at the nameAndPassword field and is null-terminated. // The encrypted password follows the user name and is NOT null-terminated. // The encrypted password may contain any byte values(0-255). } DlpReadUserInfoRespType; ////////////////////////////////////////////////////////////////////////// // dlpWriteUserInfo ////////////////////////////////////////////////////////////////////////// // Request arguments: // user id (4 bytes) // last sync PC id(4 bytes) // user name // // Response arguments: none // // Possible error codes // dlpRespErrSystem, // dlpRespErrNotEnoughSpace, // dlpRespErrParam // Request argument structure: // #define dlpWriteUserInfoReqArgID dlpFirstArgID #define dlpMaxUserNameSize 41 // max user name size, including null byte typedef struct DlpWriteUserInfoReqHdrType { // OFFSET DWord userID; // 0; user ID number DWord viewerID; // 4; id assigned to viewer by the desktop DWord lastSyncPC; // 8; last sync PC id DlpDateTimeType lastSyncDate; // 12; last sync date(year = 0 if none) Byte modFlags; // 20; flags indicating which values are being // modified; see the dlpUserInfoMod... // flags defined below Byte userNameLen; // 21; user name length, including null // TOTAL: 22 bytes } DlpWriteUserInfoReqHdrType; // Flags indicating which values are being changed by the dlpWriteUserInfo // request. These flags are used in the modFlags field of DlpWriteUserInfoReqHdrType. // These flags are additive. // #define dlpUserInfoModUserID 0x80 // changing the user id #define dlpUserInfoModSyncPC 0x40 // changing the last sync PC id #define dlpUserInfoModSyncDate 0x20 // changing sync date #define dlpUserInfoModName 0x10 // changing user name #define dlpUserInfoModViewerID 0x08 // changing the viewer id typedef struct DlpWriteUserInfoReqType { // OFFSET DlpWriteUserInfoReqHdrType header; // 0; fixed-size header // FIXED SIZE: 22 bytes Byte userName[1]; // 22; user name -- var size // User name begins at the userName field and is null-terminated. } DlpWriteUserInfoReqType; // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpReadSysInfo ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem // // Request argument structure: // // none. // Response argument structure: // enum { dlpReadSysInfoRespArgID = dlpFirstArgID }; // dlpReadSysInfoRespArgID arg structure: // typedef struct DlpReadSysInfoRespType { // OFFSET DWord romSWVersion; // 0; ROM-based sys software version DWord localizationID;// 4; localization ID Byte unused; // 8; unused(for alignment) -- set to null! Byte prodIDSize; // 9; size of productID/model field DWord prodID; // 10; product id (was variable size) // TOTAL: 14 bytes } DlpReadSysInfoRespType; ////////////////////////////////////////////////////////////////////////// // dlpGetSysDateTime ////////////////////////////////////////////////////////////////////////// // // Possible error codes: none // Request argument structure: // // none. // Response argument structure: // #define dlpGetSysDateTimeRespArgID dlpFirstArgID typedef struct DlpGetSysDateTimeRespType { // OFFSET DlpDateTimeType dateTime; // 0; system date/time // TOTAL: 8 bytes } DlpGetSysDateTimeRespType; ////////////////////////////////////////////////////////////////////////// // dlpSetSysDateTime ////////////////////////////////////////////////////////////////////////// // Request arguments: // new system date/time // // Response arguments: none // // Possible error codes // dlpRespErrParam // Request argument structure: // #define dlpSetSysDateTimeReqArgID dlpFirstArgID typedef struct DlpSetSysDateTimeReqType { // OFFSET DlpDateTimeType dateTime; // 0; new system date/time // TOTAL: 8 bytes } DlpSetSysDateTimeReqType; typedef DlpSetSysDateTimeReqType* DlpSetSysDateTimeReqPtr; // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpReadStorageInfo ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrMemory, // dlpRespErrNotFound // Request argument structure: // enum { dlpReadStorageInfoReqArgID = dlpFirstArgID }; typedef struct DlpReadStorInfoReqType { // OFFSET Byte startCardNo; // 0; card number to start at // (0 = first) Byte unused; // 1; unused -- set to null! // TOTAL: 2 bytes } DlpReadStorInfoReqType; // Response argument structure: // enum { dlpReadStorageInfoRespArgID = dlpFirstArgID, dlpReadStorageInfoExRespArgID // v1.1 extension }; // // dlpReadStorageInfoRespArgID: // // Card info structure of variable size typedef struct DlpCardInfoHdrType { // OFFSET Byte totalSize; // 0; total size of this card info // *ROUNDED UP TO EVEN SIZE* Byte cardNo; // 1; card number Word cardVersion; // 2; card version DlpDateTimeType crDate; // 4; creation date/time DWord romSize; // 12; ROM size DWord ramSize; // 16; RAM size DWord freeRam; // 20; free RAM size Byte cardNameSize; // 24; size of card name string Byte manufNameSize; // 25; size of manuf. name string // TOTAL: 26 bytes; } DlpCardInfoHdrType; typedef struct DlpCardInfoType { // OFFSET DlpCardInfoHdrType // header; // 0; fixed-size header // FIXED SIZE: 26 bytes; Byte cardNameAndManuf[1]; // 26; card name and manuf. text -- var size // Card name is the cardNameSize bytes of text at cardNameAndManuf, // followed immediately by manufNameSize bytes of manufacturer name. } DlpCardInfoType; typedef struct DlpReadStorInfoRespHdrType { // OFFSET Byte lastCardNo; // 0; card number of last card retrieved Byte more; // 1; non-zero if there are more cards Byte unused; // 2; unused -- set to null! Byte actCount; // 3; actual count of structures returned // TOTAL: 4 bytes } DlpReadStorInfoRespHdrType; typedef struct DlpReadStorInfoRespType { // OFFSET DlpReadStorInfoRespHdrType // header; // 0; fixed-size header // FIXED SIZE: 4 bytes DlpCardInfoType cardInfo[1]; // 4; actCount of card info structures -- var size } DlpReadStorInfoRespType; // // EXTENDED ARGUMENTS(DL v1.1): dlpReadStorageInfoExRespArgID // typedef struct DlpReadStorInfoExRespType { // OFFSET Word romDBCount; // 0; ROM database count Word ramDBCount; // 2; RAM database count DWord dwReserved1; // 4; RESERVED -- SET TO NULL! DWord dwReserved2; // 8; RESERVED -- SET TO NULL! DWord dwReserved3; // 12; RESERVED -- SET TO NULL! DWord dwReserved4; // 16; RESERVED -- SET TO NULL! // TOTAL: 20 bytes } DlpReadStorInfoExRespType; ////////////////////////////////////////////////////////////////////////// // dlpReadDBList ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrMemory, // dlpRespErrNotFound // Request argument structure: // #define dlpReadDBListReqArgID dlpFirstArgID typedef struct DlpReadDBListReqType { // OFFSET Byte srchFlags; // 0; search flags Byte cardNo; // 1; card number -- 0-based Word startIndex; // 2; DB index to start at // (0 = from beginning) // TOTAL: 4 bytes } DlpReadDBListReqType; #define dlpReadDBListFlagRAM 0x80 // Search for RAM-based #define dlpReadDBListFlagROM 0x40 // Search for ROM-based // Response argument structure: // #define dlpReadDBListRespArgID dlpFirstArgID // Database info structure of variable size typedef struct DlpDBInfoHdrType { // OFFSET Byte totalSize; // 0; total size of the DB info // *ROUNDED UP TO EVEN SIZE* Byte miscFlags; // 1; flags(v1.1) -- set all unused bits to null! Word dbFlags; // 2; DB flags: dlpDBFlagReadOnly, // dlpDBFlagResDB, // dlpDBFlagAppInfoDirty, dlpDBFlagOpen, // dlpDBFlagBackup; DWord type; // 4; database type DWord creator; // 8; database creator Word version; // 12; database version DWord modNum; // 14; modification number DlpDateTimeType crDate; // 18; creation date DlpDateTimeType modDate; // 26; latest modification date DlpDateTimeType backupDate; // 34; latest backup date Word dbIndex; // 42; DB index // TOTAL: 44 bytes; } DlpDBInfoHdrType; #define dlpDbInfoMiscFlagExcludeFromSync 0x80 typedef struct DlpDBInfoType { // OFFSET DlpDBInfoHdrType header; // 0; fixed-size header // FIXED SIZE: 44 bytes; Byte name[1]; // 44; databse name text -- var size and // null-terminated } DlpDBInfoType; typedef struct DlpReadDBListRespHdrType { // OFFSET Word lastIndex; // 0; DB index of last entry retrieved Byte flags; // 2; flags: dlpReadDBListRespFlagMore Byte actCount; // 3; actual count of structures returned // TOTAL: 4 bytes } DlpReadDBListRespHdrType; // dlpReadDBListRespFlagMore flag: if set, indicates that there are more // databases to list -- this enables the server to send the listing // incrementally, reducing server memory requirements if necessary #define dlpReadDBListRespFlagMore 0x80 typedef struct DlpReadDBListRespType { // OFFSET DlpReadDBListRespHdrType // header; // 0; fixed-size header // FIXED SIZE: 4 bytes DlpDBInfoType dbInfo[1]; // 4; actCount of DB info structures -- var size } DlpReadDBListRespType; ////////////////////////////////////////////////////////////////////////// // dlpOpenDB ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrMemory, // dlpRespErrParam, // dlpRespErrNotFound // dlpRespErrTooManyOpenDatabases // dlpRespErrCantOpen // Request argument structure: // #define dlpOpenDBReqArgID dlpFirstArgID typedef struct DlpOpenDBReqHdrType { // OFFSET Byte cardNo; // 0; memory module number Byte mode; // 1; open mode // TOTAL: 2 bytes; } DlpOpenDBReqHdrType; #define dlpOpenDBModeRead 0x80 #define dlpOpenDBModeWrite 0x40 #define dlpOpenDBModeExclusive 0x20 #define dlpOpenDBModeShowSecret 0x10 typedef struct DlpOpenDBReqType { // OFFSET DlpOpenDBReqHdrType // header; // 0; fixed-size header // FIXED SIZE: 2 bytes; Byte name[1]; // 2; databse name text -- var size // zero-terminated } DlpOpenDBReqType; typedef DlpOpenDBReqType* DlpOpenDBReqPtr; // Response argument structure: // #define dlpOpenDBRespArgID dlpFirstArgID // // The response argument is the 1-byte database ID to be passed in // subsequent read/write requests. ////////////////////////////////////////////////////////////////////////// // dlpCreateDB ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrMemory, // dlpRespErrParam, // dlpRespErrAlreadyExists, // dlpRespErrCantOpen, // dlpRespErrNotEnoughSpace, // dlpRespErrTooManyOpenDatabases // Request argument structure: // #define dlpCreateDBReqArgID dlpFirstArgID typedef struct DlpCreateDBReqHdrType { // OFFSET DWord creator; // 0; DB creator DWord type; // 4; DB type Byte cardNo; // 8; memory module number Byte unused; // 9; unused -- set to null Word dbFlags; // 10; allowed flags: dlpDBFlagResDB, // dlpDBFlagBackup, dlpDBFlagOKToInstallNewer, // dlpDBFlagResetAfterInstall Word version; // 12; DB version # // TOTAL: 14 bytes; } DlpCreateDBReqHdrType; typedef struct DlpCreateDBReqType { // OFFSET DlpCreateDBReqHdrType // header; // 0; fixed-size header // FIXED SIZE: 12 bytes; Byte name[1]; // 14; DB name text -- var size // zero-terminated } DlpCreateDBReqType; typedef DlpCreateDBReqType* DlpCreateDBReqPtr; // Response argument structure: // #define dlpCreateDBRespArgID dlpFirstArgID // The response argument is the 1-byte database ID to be passed in // subsequent read/write requests. ////////////////////////////////////////////////////////////////////////// // dlpCloseDB ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrParam, // dlpRespErrSystem, // dlpRespErrMemory, // dlpRespErrNoneOpen // Request argument structure: // typedef enum { dlpCloseDBReqDBIDArgID = dlpFirstArgID, // close a specific database dlpCloseDBReqAllArgID // close all databases } DlpCloseDBReqArgID; // Argument structure to close a specific database(dlpCloseDBReqDBIDArgID): // // The request argument is the 1-byte database ID returned in open/create // DB responses. // Argument structure to close all databases(dlpCloseDBReqAllArgID): // // This request argument contains no data // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpDeleteDB ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrParam, // dlpRespErrNotFound, // dlpRespErrCantOpen, // dlpRespErrDatabaseOpen // Request argument structure: // #define dlpDeleteDBReqArgID dlpFirstArgID typedef struct DlpDeleteDBReqHdrType { // OFFSET Byte cardNo; // 0; memory module number Byte unused; // 1; unused -- set to null! // TOTAL: 2 bytes; } DlpDeleteDBReqHdrType; typedef struct DlpDeleteDBReqType { // OFFSET DlpDeleteDBReqHdrType // header; // 0; fixed-size header // FIXED SIZE: 2 bytes; Byte name[1]; // 2; databse name text -- var size // zero-terminated } DlpDeleteDBReqType; typedef DlpDeleteDBReqType* DlpDeleteDBReqPtr; // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpReadOpenDBInfo ////////////////////////////////////////////////////////////////////////// // Get information on an open database // // Possible error codes // dlpRespErrNoneOpen // dlpRespErrParam // Request argument structure: // #define dlpReadOpenDBInfoArgID dlpFirstArgID // The request argument is the 1-byte database ID returned in open/create // DB responses. // Response argument structure: // #define dlpReadOpenDBInfoRespArgID dlpFirstArgID typedef struct DlpReadOpenDBInfoRespType { // OFFSET Word numRec; // 0; number of records or resources // TOTAL: 2 bytes } DlpReadOpenDBInfoRespType; ////////////////////////////////////////////////////////////////////////// // dlpMoveCategory ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrNoneOpen // dlpRespErrParam // dlpRespErrNotSupported // dlpRespErrReadOnly // Request argument structure: // #define dlpMoveCategoryReqArgID dlpFirstArgID typedef struct DlpMoveCategoryReqType { // OFFSET Byte dbID; // 0; database id Byte fromCategory; // 1; id of the "from" category Byte toCategory; // 2; id of the "to" category Byte unused; // 3; unused -- set to null! // TOTAL: 4 bytes; } DlpMoveCategoryReqType; // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpReadAppBlock ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrMemory, // dlpRespErrNotFound // dlpRespErrNoneOpen // dlpRespErrParam // Request argument structure: // #define dlpReadBlockReqArgID dlpFirstArgID typedef struct DlpReadBlockReqType { // OFFSET Byte dbID; // 0; database id Byte unused; // 1; unused -- set to null! Word offset; // 2; offset into the block Word numBytes; // 4; number of bytes to read starting // at offset(-1 = to the end) // TOTAL: 6 bytes; } DlpReadBlockReqType; // Response argument structure: // #define dlpReadBlockRespArgID dlpFirstArgID typedef struct DlpReadBlockRespHdrType { // OFFSET Word blockSize; // 0; actual block size -- may be greater // than the amount of data returned // TOTAL: 2 bytes } DlpReadBlockRespHdrType; typedef struct DlpReadBlockRespType { // OFFSET DlpReadBlockRespHdrType // header; // 0; fixed size header // FIXED SIZE: 2 bytes Byte data[1]; // 2; block data -- var size } DlpReadBlockRespType; ////////////////////////////////////////////////////////////////////////// // dlpWriteAppBlock ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrParam, // dlpRespErrReadOnly // dlpRespErrNotEnoughSpace // dlpRespErrNoneOpen // Request argument structure: // #define dlpWriteBlockReqArgID dlpFirstArgID typedef struct DlpWriteBlockReqHdrType { // OFFSET Byte dbID; // 0; database id Byte unused; // 1; unused -- set to null! Word blockSize; // 2; total block size(0 = free existing block) // TOTAL: 4 bytes; } DlpWriteBlockReqHdrType; typedef struct DlpWriteBlockReqType { // OFFSET DlpWriteBlockReqHdrType // header; // 0; fixed-size header // FIXED SIZE: 4 bytes; Byte data[1]; // 4; block data -- var size } DlpWriteBlockReqType; // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpReadSortBlock ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrMemory // dlpRespErrNotFound // dlpRespErrNoneOpen // Request argument structure: // // see dlpReadAppBlock // Response argument structure: // // see dlpReadAppBlock ////////////////////////////////////////////////////////////////////////// // dlpWriteSortBlock ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrMemory, // dlpRespErrParam, // dlpRespErrNoneOpen // Request argument structure: // // see dlpWriteAppBlock // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpReadNextModifiedRec ////////////////////////////////////////////////////////////////////////// // // Possible error codes // see dlpReadRecord // // Request argument structure: // #define dlpReadNextModRecReqArgID dlpFirstArgID // The request argument is the 1-byte database ID returned in open/create // DB responses. // Response argument structure: // // Response argument id = dlpReadRecordRespArgID // Response argument structure = DlpReadRecordRespType ////////////////////////////////////////////////////////////////////////// // dlpResetRecordIndex ////////////////////////////////////////////////////////////////////////// // Resets the "next modified record" index to the beginning // // Possible error codes // dlpRespErrParam // dlpRespErrNoneOpen // Request argument structure: // #define dlpResetRecordIndexReqArgID dlpFirstArgID // The request argument is the 1-byte database ID returned in open/create // DB responses. // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpReadRecord ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrNotSupported, // dlpRespErrSystem, // dlpRespErrMemory, // dlpRespErrParam, // dlpRespErrNotFound, // dlpRespErrRecordBusy, // dlpRespErrNoneOpen typedef enum { dlpReadRecordIdArgID = dlpFirstArgID, dlpReadRecordIndexArgID } DlpReadRecordReqArgID; // dlpReadRecordIdArgID request argument structure: // typedef struct DlpReadRecordByIDReqType { // OFFSET Byte dbID; // 0; database id Byte unused; // 1; unused -- set to null! DWord recordID; // 2; unique record id Word offset; // 6; offset into the record Word numBytes; // 8; number of bytes to read starting // at the offset(-1 = "to the end") // TOTAL: 10 bytes; } DlpReadRecordByIDReqType; // dlpReadRecordIndexArgID request argument structure: // typedef struct DlpReadRecordByIndexReqType { // OFFSET Byte dbID; // 0; database id Byte unused; // 1; unused -- set to null! Word index; // 2; record index Word offset; // 4; offset into the record Word numBytes; // 6; number of bytes to read starting // at the offset(-1 = "to the end") // TOTAL: 8 bytes; } DlpReadRecordByIndexReqType; // Response argument structure: // #define dlpReadRecordRespArgID dlpFirstArgID typedef struct DlpReadRecordRespHdrType { // OFFSET DWord recordID; // 0; unique record id Word index; // 4; record index Word recSize; // 6; total record size in bytes Byte attributes; // 8; record attributes Byte category; // 9; record category index // TOTAL: 10 bytes; } DlpReadRecordRespHdrType; typedef struct DlpReadRecordRespType { // OFFSET DlpReadRecordRespHdrType // header; // 0; fixed-size header // FIXED SIZE: 8 bytes; Byte data[1]; // 8; record data -- var size } DlpReadRecordRespType; ////////////////////////////////////////////////////////////////////////// // dlpReadRecordIDList ////////////////////////////////////////////////////////////////////////// // Returns a list of unique record id's. May need to call more than once // to get the entire list. dlpRespErrNotFound is returned when "start" // is out of bounds // // Possible error codes // dlpRespErrNotSupported, // dlpRespErrParam, // dlpRespErrNotFound, // dlpRespErrNoneOpen #define dlpReadRecordIDListReqArgID dlpFirstArgID // dlpReadRecordIDListReqArgID request argument structure: // typedef struct DlpReadRecordIDListReqType { // OFFSET Byte dbID; // 0; database id Byte flags; // 1; request flags Word start; // 2; starting record index (0-based) Word maxEntries; // 4; maximum number of entries, or // 0xFFFF to return as many as possible // TOTAL: 6 bytes; } DlpReadRecordIDListReqType; // dlpReadRecordIDListFlagSortDB: if set, DL Server will call the creator // application to resort the database before returning the list. #define dlpReadRecordIDListFlagSortDB 0x80 // Response argument structure: // #define dlpReadRecordIDListRespArgID dlpFirstArgID typedef struct DlpReadRecordIDListRespHdrType { // OFFSET Word numEntries; // 0; number of entries returned // TOTAL: 2 bytes; } DlpReadRecordIDListRespHdrType; typedef struct DlpReadRecordIDListRespType { // OFFSET DlpReadRecordIDListRespHdrType // header; // 0; fixed-size header // FIXED SIZE: 2 bytes; DWord recID[1]; // 8; list of record id's -- var size } DlpReadRecordIDListRespType; ////////////////////////////////////////////////////////////////////////// // dlpWriteRecord ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrParam, // dlpRespErrNotFound // dlpRespErrNotEnoughSpace // dlpRespErrNotSupported // dlpRespErrReadOnly // dlpRespErrNoneOpen // Request argument structure: // #define dlpWriteRecordReqArgID dlpFirstArgID // dlpWriteRecordReqArgID -- required typedef struct DlpWriteRecordReqHdrType { // OFFSET Byte dbID; // 0; database id Byte flags; // 1; set unused bits to null! DWord recordID; // 2; unique record id or null Byte attributes; // 6; record attributes -- only // dlpRecAttrSecret is allowed here // v1.1 extension: // dlpRecAttrDeleted, dlpRecAttrArchived and // dlpRecAttrDirty are also allowed. Byte category; // 7; record category // TOTAL: 8 bytes; } DlpWriteRecordReqHdrType; #define dlpWriteRecordReqFlagDataIncluded 0x80 // original implementer of destop software always // set this bit. Define it here for compatibility typedef struct DlpWriteRecordReqType { // OFFSET DlpWriteRecordReqHdrType // header; // 0; fixed-size header // FIXED SIZE: 8 bytes; Byte data[1]; // 8; record data -- var size } DlpWriteRecordReqType; // Response argument structure: // #define dlpWriteRecordRespArgID dlpFirstArgID typedef struct DlpWriteRecordRespType { // OFFSET DWord recordID; // 0; record ID // TOTAL: 4 bytes } DlpWriteRecordRespType; ////////////////////////////////////////////////////////////////////////// // dlpDeleteRecord ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrParam, // dlpRespErrNotFound // dlpRespErrNotSupported // dlpRespErrReadOnly // dlpRespErrNoneOpen // // Request argument structure: // #define dlpDeleteRecordReqArgID dlpFirstArgID // Argument structure to delete by record ID(dlpDeleteRecordReqIDArgID): typedef struct DlpDeleteRecordReqType { // OFFSET Byte dbID; // 0; database id Byte flags; // 1; flags (dlpDeleteRecFlagDeleteAll) DWord recordID; // 2; unique record id (see flags) // TOTAL: 6 bytes; } DlpDeleteRecordReqType; // dlpDeleteRecFlagDeleteAll: if this flag is set, the reocordID field // is ignored and all database records will be deleted #define dlpDeleteRecFlagDeleteAll 0x80 // dlpDeleteRecFlagByCategory: if this flag is set, the least significant byte // of the reocordID field contains the category id of records to be deleted #define dlpDeleteRecFlagByCategory 0x40 // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpReadResource ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrParam, // dlpRespErrNotFound // dlpRespErrNoneOpen typedef enum { dlpReadResourceIndexArgID = dlpFirstArgID, dlpReadResourceTypeArgID } DlpReadResourceReqArgID; // dlpReadResourceIndexArgID request argument structure: // typedef struct DlpReadResourceByIndexReqType { // OFFSET Byte dbID; // 0; database id Byte unused; // 1; unused -- set to null! Word index; // 2; resource index Word offset; // 4; offset into the resource Word numBytes; // 6; number of bytes to read starting // at the offset(-1 = "to the end") // TOTAL: 8 bytes; } DlpReadResourceByIndexReqType; // dlpReadResourceTypeArgID request argument structure: // typedef struct DlpReadResourceByTypeReqType { // OFFSET Byte dbID; // 0; database id Byte unused; // 1; unused -- set to null! DWord type; // 2; resource type Word id; // 6; resource id Word offset; // 8; offset into the resource Word numBytes; // 10; number of bytes to read starting // at the offset(-1 = "to the end") // TOTAL: 12 bytes; } DlpReadResourceByTypeReqType; // Response argument structure: // #define dlpReadResourceRespArgID dlpFirstArgID typedef struct DlpReadResourceRespHdrType { // OFFSET DWord type; // 0; resource type Word id; // 4; resource id Word index; // 6; resource index Word resSize; // 8; total resource size in bytes // TOTAL: 10 bytes; } DlpReadResourceRespHdrType; typedef struct DlpReadResourceRespType { // OFFSET DlpReadResourceRespHdrType // header; // 0; fixed-size header // FIXED SIZE: 6 bytes; Byte resData[1]; // 6; resource data -- var size } DlpReadResourceRespType; ////////////////////////////////////////////////////////////////////////// // dlpWriteResource ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrNotEnoughSpace, // dlpRespErrParam, // dlpRespErrNoneOpen // Request argument structure: // #define dlpWriteResourceReqArgID dlpFirstArgID typedef struct DlpWriteResourceReqHdrType { // OFFSET Byte dbID; // 0; database id Byte unused; // 1; inused -- set to null! DWord type; // 2; resource type Word id; // 6; resource id Word resSize; // 8; total resource size // TOTAL: 10 bytes; } DlpWriteResourceReqHdrType; typedef struct DlpWriteResourceReqType { // OFFSET DlpWriteResourceReqHdrType // header; // 0; fixed-size header // FIXED SIZE: 10 bytes; Byte data[1]; // 10; resource data -- var size } DlpWriteResourceReqType; // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpDeleteResource ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrParam, // dlpRespErrNotFound // dlpRespErrNotSupported // dlpRespErrReadOnly // dlpRespErrNoneOpen // Request argument structure: // #define dlpDeleteResourceReqArgID dlpFirstArgID typedef struct DlpDeleteResourceReqType { // OFFSET Byte dbID; // 0; database id Byte flags; // 1; flags (dlpDeleteResFlagDeleteAll) DWord type; // 2; resource type Word id; // 6; resource id // TOTAL: 8 bytes; } DlpDeleteResourceReqType; // dlpDeleteResFlagDeleteAll: if set, all resources in the db will be deleted #define dlpDeleteResFlagDeleteAll 0x80 // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpCleanUpDatabase ////////////////////////////////////////////////////////////////////////// // Deletes all records which are marked as archived or deleted in the // record database // // Possible error codes // dlpRespErrSystem, // dlpRespErrParam, // dlpRespErrReadOnly, // dlpRespErrNotSupported // dlpRespErrNoneOpen // Request argument structure: // #define dlpCleanUpDatabaseReqArgID dlpFirstArgID // The request argument is the 1-byte database ID returned in open/create // DB responses. // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpResetSyncFlags ////////////////////////////////////////////////////////////////////////// // For record databases, reset all dirty flags. // For both record and resource databases, set the last sync time to NOW // // Possible error codes // dlpRespErrSystem, // dlpRespErrParam // dlpRespErrReadOnly, // dlpRespErrNoneOpen // Request argument structure: // #define dlpResetSyncFlagsReqArgID dlpFirstArgID // The request argument is the 1-byte database ID returned in open/create // DB responses. // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpCallApplication ////////////////////////////////////////////////////////////////////////// // Call an application entry point via an action code // // Possible error codes // dlpRespErrSystem, // dlpRespErrMemory, // dlpRespErrParam, // dlpRespErrNotFound // Request argument structure: // enum { dlpCallApplicationReqArgIDV10 = dlpFirstArgID, // req id for Pilot v1.0 dlpCallAppReqArgID // req id for Pilot v2.0 and later }; // dlpCallApplicationReqArgIDV10: typedef struct DlpCallApplicationReqHdrTypeV10 { // OFFSET DWord creator; // 0; app DB creator id Word action; // 4; action code Word paramSize; // 6; custom param size // TOTAL: 8 bytes } DlpCallApplicationReqHdrTypeV10; typedef struct DlpCallApplicationReqTypeV10 { // OFFSET DlpCallApplicationReqHdrTypeV10 // header; // 0; fixed-size header // FIXED SIZE: 8 bytes Byte paramData[1]; // 8; custom param data -- var size } DlpCallApplicationReqTypeV10; // dlpCallAppReqArgID (Pilot v2.0): typedef struct DlpCallAppReqHdrType { // OFFSET DWord creator; // 0; DB creator id of target executable DWord type; // 4; DB type id of target executable Word action; // 8; action code DWord dwParamSize; // 10; custom param size in number of bytes DWord dwReserved1; // 14; RESERVED -- set to NULL!!! DWord dwReserved2; // 18; RESERVED -- set to NULL!!! // TOTAL: 22 bytes } DlpCallAppReqHdrType; typedef struct DlpCallAppReqType { // OFFSET DlpCallAppReqHdrType // hdr; // 0; fixed-size header // FIXED SIZE: 22 bytes Byte paramData[1]; // 22; custom param data -- var size } DlpCallAppReqType; // Response argument structure: // enum { dlpCallApplicationRespArgIDV10 = dlpFirstArgID, // resp id for Pilot v1.0 dlpCallAppRespArgID // resp id for Pilot v2.0 and later }; // dlpCallApplicationRespArgIDV10: typedef struct DlpCallApplicationRespHdrTypeV10 { // OFFSET Word action; // 0; action code which was called Word resultCode; // 2; result error code returned by action Word resultSize; // 4; custom result data size // TOTAL: 6 bytes } DlpCallApplicationRespHdrTypeV10; typedef struct DlpCallApplicationRespTypeV10 { // OFFSET DlpCallApplicationRespHdrTypeV10 // header; // 0; fixed-size header // FIXED SIZE: 6 bytes Byte resultData[1]; // 6; custom result data -- var size } DlpCallApplicationRespTypeV10; // dlpCallAppRespArgID: typedef struct DlpCallAppRespHdrType { // OFFSET DWord dwResultCode; // 0; result error code returned by handler DWord dwResultSize; // 4; custom result data size DWord dwReserved1; // 8; RESERVED -- SET TO NULL!!! DWord dwReserved2; // 12; RESERVED -- SET TO NULL!!! // TOTAL: 16 bytes } DlpCallAppRespHdrType; typedef struct DlpCallAppRespType { // OFFSET DlpCallAppRespHdrType // hdr; // 0; fixed-size header // FIXED SIZE: 16 bytes Byte resultData[1]; // 16; custom result data -- var size } DlpCallAppRespType; ////////////////////////////////////////////////////////////////////////// // dlpResetSystem ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem // Request argument structure: // // none. // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpAddSyncLogEntry ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrNotEnoughSpace, // dlpRespErrLimitExceeded, // dlpRespErrParam // Request argument structure: // #define dlpAddSyncLogEntryReqArgID dlpFirstArgID typedef struct DlpAddSyncLogEntryReqType { // OFFSET Byte text[1]; // 0; entry text -- var size and // null-terminated } DlpAddSyncLogEntryReqType; // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpProcessRPC ////////////////////////////////////////////////////////////////////////// // Remote Procedure Call interface // // Request arguments: // RPC command block // // Response arguments: // RPC reply block // // Possible error codes // 0 on success; otherwise error code from the TouchDown // RPC executor // // NOTE: this is a low-level system command which does not use arg wrappers. // Request argument structure: // // Block of RPC command data (no arg wrapper) // Response argument structure: // // Block of RPC reply data of same length as command block(no arg wrapper) ////////////////////////////////////////////////////////////////////////// // dlpOpenConduit ////////////////////////////////////////////////////////////////////////// // This command is sent before each conduit is opened by the desktop. // If the viewer has a cancel pending, it will return dlpRespErrCancelSync // in the response header's errorCode field. // // Request arguments: none. // // Response arguments: none. // // Possible error codes // dlpRespErrCancelSync // Request argument structure: // // none. // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpEndOfSync ////////////////////////////////////////////////////////////////////////// // This command is sent by the desktop to end the sync. // // Request arguments: termination code: 0 = normal termination; // otherwise the client is aborting the sync // // Possible error codes // 0 // Request argument structure: // #define dlpEndOfSyncReqArgID dlpFirstArgID typedef enum DlpSyncTermCode { dlpTermCodeNormal = 0, // normal termination dlpTermCodeOutOfMemory, // termination due to low memory on TD dlpTermCodeUserCan, // user cancelled from desktop dlpTermCodeOther // catch-all abnormal termination code } DlpSyncTermCode; typedef struct DlpEndOfSyncReqType { // OFFSET Word termCode; // 0; termination code // TOTAL: 2 bytes } DlpEndOfSyncReqType; // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpReadNextRecInCategory ////////////////////////////////////////////////////////////////////////// // // Possible error codes // see dlpReadRecord #define dlpReadNextRecInCategoryReqArgID dlpFirstArgID // dlpReadNextRecInCategoryReqArgID request argument structure: // typedef struct DlpReadNextRecInCategoryReqType { // OFFSET Byte dbID; // 0; database id Byte category; // 1; category id // TOTAL: 2 bytes; } DlpReadNextRecInCategoryReqType; // Response argument structure: // // Response argument id = dlpReadRecordRespArgID // Response argument structure = DlpReadRecordRespType ////////////////////////////////////////////////////////////////////////// // dlpReadNextModifiedRecInCategory ////////////////////////////////////////////////////////////////////////// // // Possible error codes // see dlpReadNextRecInCategory // Request argument structure: // // same as dlpReadNextRecInCategory // Response argument structure: // // same as dlpReadNextRecInCategory ////////////////////////////////////////////////////////////////////////// // dlpReadAppPreference ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrMemory, // dlpRespErrParam, // dlpRespErrNotFound, #define dlpReadAppPreferenceReqArgID dlpFirstArgID // dlpReadAppPreferenceReqArgID request argument structure: // typedef struct DlpReadAppPreferenceReqType { // OFFSET DWord creator; // 0; application creator type Word id; // 4; preference id Word reqBytes; // 6; max. number of preference bytes requested; // pass 0xFFFF for actual size Byte flags; // 8; command flags: dlpAppPrefReqFlagBackedUp - if set, use backed-up pref db Byte unused; // 9; reserved/padding -- set to NUL! // TOTAL: 10 bytes; } DlpReadAppPreferenceReqType; #define dlpReadAppPrefActualSize 0xFFFF #define dlpAppPrefReqFlagBackedUp 0x80 // Response argument structure: // #define dlpReadAppPreferenceRespArgID dlpFirstArgID typedef struct DlpReadAppPreferenceRespHdrType { // OFFSET Word version; // 0; version number of the application Word actualSize; // 2; actual preference data size Word retBytes; // 4; number of preference bytes returned // TOTAL: 6 bytes } DlpReadAppPreferenceRespHdrType; typedef struct DlpReadAppPreferenceRespType { // OFFSET DlpReadAppPreferenceRespHdrType // header; // 0; fixed-size header // FIXED SIZE: 6 bytes Byte data[1]; // 6; custom result data -- var size } DlpReadAppPreferenceRespType; ////////////////////////////////////////////////////////////////////////// // dlpWriteAppPreference ////////////////////////////////////////////////////////////////////////// // // Possible error codes // dlpRespErrSystem, // dlpRespErrParam, // dlpRespErrNotEnoughSpace // Request argument structure: // #define dlpWriteAppPreferenceReqArgID dlpFirstArgID typedef struct DlpWriteAppPreferenceReqHdrType { // OFFSET DWord creator; // 0; application creator type Word id; // 4; preference id Word version; // 6; version number of the application Word prefSize; // 8; preference size(in number of bytes) Byte flags; // 10; command flags: dlpAppPrefReqFlagBackedUp - if set, use backed-up pref db Byte unused; // 11; reserved/padding -- set to NUL! // TOTAL: 12 bytes; } DlpWriteAppPreferenceReqHdrType; typedef struct DlpWriteAppPreferenceReqType { // OFFSET DlpWriteAppPreferenceReqHdrType // header; // 0; fixed-size header // FIXED SIZE: 12 bytes; Byte data[1]; // 12; record data -- var size } DlpWriteAppPreferenceReqType; // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpReadNetSyncInfo ////////////////////////////////////////////////////////////////////////// // Request arguments: none // // Response arguments: // // Possible error codes // dlpRespErrSystem, // dlpRespErrMemory // Request argument structure: // // none. // Response argument structure: // #define dlpReadNetSyncInfoRespArgID dlpFirstArgID typedef struct DlpReadNetSyncInfoRespHdrType { // OFFSET Byte lanSyncOn; // 0; non-zero if Lan Sync is enabled Byte bReserved1; // 1; reserved -- SET TO NULL! DWord dwReserved1; // 2; reserved -- SET TO NULL! DWord dwReserved2; // 6; reserved -- SET TO NULL! DWord dwReserved3; // 10; reserved -- SET TO NULL! DWord dwReserved4; // 14; reserved -- SET TO NULL! Word syncPCNameSize;// 18; length of sync PC host name, // including null (0 = no host name) Word syncPCAddrSize;// 20; length of sync PC address, // including null (0 = no address) Word syncPCMaskSize;// 22; length of sync PC subnet mask, // including null (0 = no mask) // TOTAL: 24 bytes } DlpReadNetSyncInfoRespHdrType; typedef struct DlpReadNetSyncInfoRespType { // OFFSET DlpReadNetSyncInfoRespHdrType // hdr; // 0; fixed-size header // FIXED SIZE: 24 bytes Byte syncAddr[1]; // 24; sync IP address/host name -- var size, // null-terminated } DlpReadNetSyncInfoRespType; ////////////////////////////////////////////////////////////////////////// // dlpWriteNetSyncInfo ////////////////////////////////////////////////////////////////////////// // Request arguments: // // Response arguments: none // // Possible error codes // dlpRespErrSystem, // dlpRespErrNotEnoughSpace, // dlpRespErrParam // Request argument structure: // #define dlpWriteNetSyncInfoReqArgID dlpFirstArgID #define dlpMaxHostAddrLength 255 // maximum PC host name length, not including NULL typedef struct DlpWriteNetSyncInfoReqHdrType { // OFFSET Byte modFlags; // 0; flags indicating which values are being // modified; see the dlpNetSyncInfoMod... // flags defined below Byte lanSyncOn; // 1; non-zero if Lan Sync is enabled DWord dwReserved1; // 2; reserved -- SET TO NULL! DWord dwReserved2; // 6; reserved -- SET TO NULL! DWord dwReserved3; // 10; reserved -- SET TO NULL! DWord dwReserved4; // 14; reserved -- SET TO NULL! Word syncPCNameSize;// 18; length of sync PC host name, // including null (0 = no address/host name) Word syncPCAddrSize;// 20; length of sync PC address, // including null (0 = no address) Word syncPCMaskSize;// 22; length of sync PC subnet mask, // including null (0 = no mask) // TOTAL: 24 bytes } DlpWriteNetSyncInfoReqHdrType; // Flags indicating which values are being changed by the dlpWriteNetSyncInfo // request. These flags are used in the modFlags field of DlpWriteNetSyncInfoReqHdrType. // These flags are additive. // #define dlpNetSyncInfoModLanSyncOn 0x80 // changing the "lan sync on" setting #define dlpNetSyncInfoModSyncPCName 0x40 // changing the sync PC host name #define dlpNetSyncInfoModSyncPCAddr 0x20 // changing the sync PC address #define dlpNetSyncInfoModSyncPCMask 0x10 // changing the sync PC subnet mask typedef struct DlpWriteNetSyncInfoReqType { // OFFSET DlpWriteNetSyncInfoReqHdrType hdr; // 0; fixed-size header // FIXED SIZE: 24 bytes Byte syncAddr[1]; // 24; sync IP address/host name -- var size, // null-terminated } DlpWriteNetSyncInfoReqType; // Response argument structure: // // none. ////////////////////////////////////////////////////////////////////////// // dlpReadFeature ////////////////////////////////////////////////////////////////////////// // Request arguments: // // Response arguments: // // Possible error codes // dlpRespErrSystem, // dlpRespErrNotFound, // dlpRespErrParam // Request argument structure: // #define dlpReadFeatureReqArgID dlpFirstArgID typedef struct DlpReadFeatureReqType { // OFFSET DWord dwFtrCreator; // 0; feature creator Word wFtrNum; // 4; feature number // TOTAL: 6 bytes } DlpReadFeatureReqType; // Response argument structure: // #define dlpReadFeatureRespArgID dlpFirstArgID typedef struct DlpReadFeatureRespType { // OFFSET DWord dwFeature; // 0; feature value // TOTAL: 4 bytes } DlpReadFeatureRespType; /************************************************************ * Macros *************************************************************/ #endif // __DLCOMMON_H__