diff options
Diffstat (limited to 'SrcShared/Palm/Platform/Incs/Core/System/SystemPkt.h')
-rw-r--r-- | SrcShared/Palm/Platform/Incs/Core/System/SystemPkt.h | 430 |
1 files changed, 430 insertions, 0 deletions
diff --git a/SrcShared/Palm/Platform/Incs/Core/System/SystemPkt.h b/SrcShared/Palm/Platform/Incs/Core/System/SystemPkt.h new file mode 100644 index 0000000..80c562b --- /dev/null +++ b/SrcShared/Palm/Platform/Incs/Core/System/SystemPkt.h @@ -0,0 +1,430 @@ +/****************************************************************************** + * + * Copyright (c) 1994-1999 Palm Computing, Inc. or its subsidiaries. + * All rights reserved. + * + * File: SystemPkt.h + * + * Description: + * Structure of System Packets for the Serial Link Manager. These + * packets are used by the Debugger, Console, and Remote UI modules + * for communication with the host computer. + * + * History: + * 6/26/95 RM - Created by Ron Marianetti + * + *****************************************************************************/ + +#ifndef __SYSTEM_PKT_H__ +#define __SYSTEM_PKT_H__ + +#include <SerialLinkMgr.h> + + +//************************************************************************* +// Constants for System Packets +// +//************************************************************************* + +// Max # of bytes we can read/write at a time with the ReadMem and WriteMem +// commands; +#define sysPktMaxMemChunk 256 + +// Maximum body size for System Packets. This is big enough to have +// 256 bytes of data for the Read and Write Mem command plus whatever other +// parameters are in the body for these commands. +#define sysPktMaxBodySize (sysPktMaxMemChunk+16) + + +// Default nitial timeout value for packet receive routines in ticks +#define sysPktInitialTimeout (sysTicksPerSecond*10) + + + +//************************************************************************* +// Packet Body Structure +//************************************************************************* + +// Common fields at the start of every body +#define _sysPktBodyCommon \ + UInt8 command; \ + UInt8 _filler + + +// Generic System Packet Body +typedef struct SysPktBodyType { + _sysPktBodyCommon; + UInt8 data[sysPktMaxBodySize-2]; + } SysPktBodyType; +typedef SysPktBodyType* SysPktBodyPtr; + + + +//************************************************************************* +// The max size of the array of SlkWriteDataTypes used by System Packet +// assembly routines in order to minimize stack usage. +//************************************************************************* +#define sysPktMaxBodyChunks 3 + + + +//************************************************************************* +// packet commands +//************************************************************************* + +//-------------------------------------------------------------------- +// get state command +//-------------------------------------------------------------------- +#define sysPktStateCmd 0x00 +#define sysPktStateRsp 0x80 + +//-------------------------------------------------------------------- +// read memory command +//-------------------------------------------------------------------- +#define sysPktReadMemCmd 0x01 +#define sysPktReadMemRsp 0x81 + +typedef struct SysPktReadMemCmdType { + _sysPktBodyCommon; // Common Body header + void* address; // Address to read + UInt16 numBytes; // # of bytes to read + } SysPktReadMemCmdType; +typedef SysPktReadMemCmdType* SysPktReadMemCmdPtr; + +typedef struct SysPktReadMemRspType { + _sysPktBodyCommon; // Common Body header + // UInt8 data[?]; // variable size + } SysPktReadMemRspType; +typedef SysPktReadMemRspType* SysPktReadMemRspPtr; + + +//-------------------------------------------------------------------- +// write memory command +//-------------------------------------------------------------------- +#define sysPktWriteMemCmd 0x02 +#define sysPktWriteMemRsp 0x82 + +typedef struct SysPktWriteMemCmdType { + _sysPktBodyCommon; // Common Body header + void* address; // Address to write + UInt16 numBytes; // # of bytes to write + // UInt8 data[?]; // variable size data + } SysPktWriteMemCmdType; +typedef SysPktWriteMemCmdType* SysPktWriteMemCmdPtr; + +typedef struct SysPktWriteMemRspType { + _sysPktBodyCommon; // Common Body header + } SysPktWriteMemRspType; +typedef SysPktWriteMemRspType* SysPktWriteMemRspPtr; + + +//-------------------------------------------------------------------- +// single-step command +//-------------------------------------------------------------------- +#define sysPktSingleStepCmd 0x03 +// no response + +//-------------------------------------------------------------------- +// get routine name command +//-------------------------------------------------------------------- +#define sysPktGetRtnNameCmd 0x04 +#define sysPktGetRtnNameRsp 0x84 + +//-------------------------------------------------------------------- +// read registers command +//-------------------------------------------------------------------- +#define sysPktReadRegsCmd 0x05 +#define sysPktReadRegsRsp 0x85 + + +//-------------------------------------------------------------------- +// write registers command +//-------------------------------------------------------------------- +#define sysPktWriteRegsCmd 0x06 +#define sysPktWriteRegsRsp 0x86 + +//-------------------------------------------------------------------- +// continue command +//-------------------------------------------------------------------- +#define sysPktContinueCmd 0x07 +// no response + + +//-------------------------------------------------------------------- +// Remote Procedure call +//-------------------------------------------------------------------- +#define sysPktRPCCmd 0x0A +#define sysPktRPCRsp 0x8A + +typedef struct SysPktRPCParamInfo { + UInt8 byRef; // true if param is by reference + UInt8 size; // # of Bytes of paramData (must be even) + UInt16 data[1]; // variable length array of paramData + } SysPktRPCParamType; + +typedef struct SysPktRPCType { + _sysPktBodyCommon; // Common Body header + UInt16 trapWord; // which trap to execute + UInt32 resultD0; // result from D0 placed here + UInt32 resultA0; // result from A0 placed here + UInt16 numParams; // how many parameters follow + // Following is a variable length array ofSlkRPCParamInfo's + SysPktRPCParamType param[1]; + } SysPktRPCType; + + +//-------------------------------------------------------------------- +// Set/Get breakpoints +//-------------------------------------------------------------------- +#define sysPktGetBreakpointsCmd 0x0B +#define sysPktGetBreakpointsRsp 0x8B +#define sysPktSetBreakpointsCmd 0x0C +#define sysPktSetBreakpointsRsp 0x8C + + +//-------------------------------------------------------------------- +// Remote UI Support - These packets are used by the screen driver +// and event manager to support remote viewing and control of a Pilot +// over the serial port. +//-------------------------------------------------------------------- +#define sysPktRemoteUIUpdCmd 0x0C + +typedef struct SysPktRemoteUIUpdCmdType { + _sysPktBodyCommon; // Common Body header + + // These parameters are sent from traget to host after drawing operations + UInt16 rowBytes; // rowbytes of update area + UInt16 fromY; // top of update rect + UInt16 fromX; // left of update rect + UInt16 toY; // top of screen rect + UInt16 toX; // left of screen rect + UInt16 height; // bottom of update rect + UInt16 width; // right of update rect + + // The actual pixels of the update area follow + UInt16 pixels; // variable length... + + } SysPktRemoteUIUpdCmdType; + + +#define sysPktRemoteEvtCmd 0x0D + +typedef struct SysPktRemoteEvtCmdType { + _sysPktBodyCommon; // Common Body header + + // These parameters are sent from host to target to feed pen and keyboard + // events. They do not require a response. + Boolean penDown; // true if pen down + UInt8 padding1; + Int16 penX; // X location of pen + Int16 penY; // Y location of pen + + Boolean keyPress; // true if key event follows + UInt8 padding2; + UInt16 keyModifiers; // keyboard modifiers + WChar keyAscii; // key ascii code + UInt16 keyCode; // key virtual code + + } SysPktRemoteEvtCmdType; + + +//-------------------------------------------------------------------- +// Enable/Disable DbgBreak's command +//-------------------------------------------------------------------- +#define sysPktDbgBreakToggleCmd 0x0D +#define sysPktDbgBreakToggleRsp 0x8D + + +//-------------------------------------------------------------------- +// Program Flash command - programs one sector of the FLASH ram +// If numBytes is 0, this routine returns info on the flash in: +// manuf - manufacturer code +// device - device code +//-------------------------------------------------------------------- +#define sysPktFlashCmd 0x0E // OBSOLETE AS OF 3.0! SEE BELOW! +#define sysPktFlashRsp 0x8E // OSBOLETE AS OF 3.0! SEE BELOW! + + +//-------------------------------------------------------------------- +// Get/Set communication parameters +//-------------------------------------------------------------------- +#define sysPktCommCmd 0x0F +#define sysPktCommRsp 0x8F + +typedef struct SysPktCommCmdType { + _sysPktBodyCommon; // Common Body header + Boolean set; // true to change parameters + UInt8 padding; + UInt32 baudRate; // new baud rate + UInt32 flags; // new flags + } SysPktCommCmdType; +typedef SysPktCommCmdType *SysPktCommCmdPtr; + +typedef struct SysPktCommRspType { + _sysPktBodyCommon; // Common Body header + UInt32 baudRate; // current baud rate + UInt32 flags; // current flags + } SysPktCommRspType; +typedef SysPktCommRspType *SysPktCommRspPtr; + + +//-------------------------------------------------------------------- +// Get/Set Trap Breaks +//-------------------------------------------------------------------- +#define sysPktGetTrapBreaksCmd 0x10 +#define sysPktGetTrapBreaksRsp 0x90 +#define sysPktSetTrapBreaksCmd 0x11 +#define sysPktSetTrapBreaksRsp 0x91 + + +//-------------------------------------------------------------------- +// Gremlins Support - These packets are used by the screen driver +// and event manager to support remote viewing and control of a Pilot +// over the serial port. +//-------------------------------------------------------------------- +#define sysPktGremlinsCmd 0x12 + +typedef struct SysPktGremlinsCmdType { + _sysPktBodyCommon; // Common Body header + + // These parameters are sent from target to host to send Gremlins stuff + UInt16 action; + UInt8 data[32]; + + } SysPktGremlinsCmdType; + +// Gremlins action codes +#define sysPktGremlinsIdle 1 +#define sysPktGremlinsEvent 2 + + +//-------------------------------------------------------------------- +// Find data - searches a range of addresses for data +//-------------------------------------------------------------------- +#define sysPktFindCmd 0x13 +#define sysPktFindRsp (sysPktFindCmd | 0x80) + +typedef struct SysPktFindCmdType { + _sysPktBodyCommon; // Common Body header + + UInt32 firstAddr; // first address to search + UInt32 lastAddr; // last address to begin searching + UInt16 numBytes; // number of data bytes to match + Boolean caseInsensitive; // if true, perform a case-insensitive search + UInt8 padding; + } SysPktFindCmdType; +typedef SysPktFindCmdType* SysPktFindCmdPtr; + +typedef struct SysPktFindRspType { + _sysPktBodyCommon; // Common Body header + + UInt32 addr; // address where data was found + Boolean found; // true if data was found + UInt8 padding; + + } SysPktFindRspType; +typedef SysPktFindRspType* SysPktFindRspPtr; + + +//-------------------------------------------------------------------- +// Get/Set Trap Conditionals. These are used to tell the debugger +// to conditionally break on a trap depending on the value of the +// first word on the stack. They are used when setting a-traps on +// library calls. This is a 3.0 feature. +//-------------------------------------------------------------------- +#define sysPktGetTrapConditionsCmd 0x14 +#define sysPktGetTrapConditionsRsp 0x94 +#define sysPktSetTrapConditionsCmd 0x15 +#define sysPktSetTrapConditionsRsp 0x95 + + +//-------------------------------------------------------------------- +// Checksum data - checksums a range of memory. +// This is a (late) 3.0 feature. +//-------------------------------------------------------------------- +#define sysPktChecksumCmd 0x16 +#define sysPktChecksumRsp (sysPktChecksumCmd | 0x80) + +typedef struct SysPktChecksumType { + _sysPktBodyCommon; // Common Body header + + UInt32 firstAddr; // -> first address to checksum + UInt16 numBytes; // -> number of bytes to checksum + UInt16 seed; // -> initial checksum value + UInt16 checksum; // <- checksum result + } SysPktChecksumType; +typedef SysPktChecksumType* SysPktChecksumPtr; + + +//-------------------------------------------------------------------- +// NEW Program Flash command - programs one sector of the FLASH ram +// If numBytes is 0, this routine returns address to store flash code. +// Supercedes Obsolete 1.0 and 2.0 sysPktFlashCmd call above in the 3.0 ROM +//-------------------------------------------------------------------- +#define sysPktExecFlashCmd 0x17 +#define sysPktExecFlashRsp (sysPktExecFlashCmd | 0x80) + + +//-------------------------------------------------------------------- +// message from remote unit +//-------------------------------------------------------------------- +#define sysPktRemoteMsgCmd 0x7f + + +//-------------------------------------------------------------------- +// sysPktRemoteMsg +// Send a text message +//-------------------------------------------------------------------- +typedef struct SysPktRemoteMsgCmdType { + _sysPktBodyCommon; // Common Body header + //UInt8 text; // variable length text goes here + } SysPktRemoteMsgCmdType; +typedef SysPktRemoteMsgCmdType *SysPktRemoteMsgCmdPtr; + + + + + +/******************************************************************* + * Prototypes + *******************************************************************/ +#ifdef REMOVE_FOR_EMULATOR +#ifdef __cplusplus +extern "C" { +#endif + +//================================================================ +// +// Host Only Routines. +// +//================================================================ +#if (EMULATION_LEVEL != EMULATION_NONE) + + + //------------------------------------------------------------------- + // RPC + //------------------------------------------------------------------ + // Init preparate on an RPC packet header and body. + Err SlkRPCInitPacket(SlkPktHeaderType *headerP, UInt16 dstSocket, + SysPktRPCType *bodyP, UInt16 trapWord); + + + // Stuff a parameter into an RPC packet body + void * SlkRPCStuffParam(SysPktRPCType *bodyP, const void *dataP, + Int16 dataSize, Boolean byRef); + + // Send RPC packet and wait for response. + Err SlkRPCExecute(SlkPktHeaderPtr headerP, SysPktRPCType *bodyP, + Boolean async); + +#endif // (EMULATION_LEVEL != EMULATION_NONE) + + +#ifdef __cplusplus +} +#endif +#endif + + + +#endif //__SYSTEM_PKT_H__ |