; ; File: Power.a ; ; Contains: Power Manager glue ; ; Written by: Dennis Hescox ; ; Copyright: © 1990-1992 by Apple Computer, Inc. All rights reserved. ; ; Change History (most recent first): ; ; 11/6/92 SWC Rewrote all the routines (read: cleanup). ; 10/28/92 SWC Changed INCLUDEs to a LOAD of StandardEqu.d. ; <6> 11/15/91 JL Changed MoveA.L RBuffer(A6) to MoveA.L PmgrRPtr(A0) after the ; trap call to put an address in A0 instead of data. ; <5> 11/12/91 JL stb: allocated receive buffers for BatteryStatus, ModemStatus, ; and GetWUTime. ; <4> 1/22/91 ag MSH: Moved Power Manager command equates directly into this file ; from PowerEqu.a to make them private. ; <3> 1/22/91 ag MSH - Moved Power Manager command equates directly into this ; file from PowerEqu.a to make them private. ; LOAD 'StandardEqu.d' ; Power Manager command block pmCommandRec RECORD 0,INCREMENT pmCommand DS.W 1 ; command pmLength DS.W 1 ; length of data to send pmSBuffer DS.L 1 ; pointer to send buffer pmRBuffer DS.L 1 ; pointer to receive buffer pmData DS.L 1 ; data pmBlkSize EQU *-pmCommandRec ENDR ; commands for Power Manager parameter block modemRead EQU $58 ; internal modem setup batteryRead EQU $68 ; battery/charger level and status setWakeUp EQU $80 ; set WakeUp timer disableWakeUp EQU $82 ; disable WakeUp timer readWakeUp EQU $88 ; read WakeUp timer ;_______________________________________________________________________________________ ; ; FUNCTION DisableWUTime: OSErr ; ; This function will disable the wakeup timer on portable Macintoshes. ; ; on entry: 4(SP) - space for function result ; 0(SP) - return address ;_______________________________________________________________________________________ DisableWUTime PROC EXPORT WITH pmCommandRec CLR.L -(SP) ; pmRBuffer (none) CLR.L -(SP) ; pmSBuffer (none) CLR.W -(SP) ; pmLength (no data to send) MOVE.W #disableWakeUp,-(SP) ; pmCommand MOVEA.L SP,A0 ; point to the parameter block _PMgrOp ; disable the timer LEA pmRBuffer+4(SP),SP ; toss the parameter block MOVE.W D0,4(SP) ; return the result RTS ENDP ;_______________________________________________________________________________________ ; ; FUNCTION GetWUTime(VAR WUTime: LONGINT; VAR WUFlag: Byte): OSErr ; ; This function will return the current setting of the wakeup timer on portable ; Macintoshes. The time returned is the number of seconds since Jan 1, 1904. ; ; on entry: 12(SP) - space for function result ; 8(SP) - pointer to ÔWUTimeÕ ; 4(SP) - pointer to ÔWUFlagÕ ; 0(SP) - return address ;_______________________________________________________________________________________ GetWUTime PROC EXPORT WITH pmCommandRec MOVEA.L (SP)+,A1 ; pop the return address SUBQ.W #4+2,SP ; make space for wakeup time + flags MOVE.L SP,-(SP) ; pmRBuffer CLR.L -(SP) ; pmSBuffer (none) CLR.W -(SP) ; pmLength (no data to send) MOVE.W #readWakeUp,-(SP) ; pmCommand MOVEA.L SP,A0 ; point to the parameter block _PMgrOp ; read the timer LEA pmRBuffer+4(SP),SP ; toss the parameter block MOVE.L (SP)+,D1 ; get the timer setting MOVE.B (SP)+,D2 ; and the flags MOVEA.L (SP)+,A0 ; get the pointer to ÔWUFlagÕ MOVE.B D2,(A0) ; and update it MOVEA.L (SP)+,A0 ; get the pointer to ÔWUTimeÕ MOVE.L D1,(A0) ; and update it MOVE.W D0,(SP) ; save the result JMP (A1) ENDP ;_______________________________________________________________________________________ ; ; FUNCTION SetWUTime(WUTime: LONGINT): OSErr ; ; This function will set the wakeup timer on portable Macintoshes. The time passed ; is the number of seconds since Jan 1, 1904. ; ; on entry: 8(SP) - space for function result ; 4(SP) - WUTime ; 0(SP) - return address ;_______________________________________________________________________________________ SetWUTime PROC EXPORT WITH pmCommandRec MOVE.L (SP)+,A1 ; pop the return address MOVE.L SP,-(SP) ; pmSBuffer (points to WUTime on the stack) MOVE.W #4,-(SP) ; sending 4 bytes MOVE.W #setWakeUp,-(SP) ; command MOVEA.L SP,A0 ; point to the parameter block _PMgrOp ; send the command LEA pmRBuffer+4(SP),SP ; toss the parameter block MOVE.W D0,(SP) ; stuff the function result JMP (A1) ENDP ;_______________________________________________________________________________________ ; ; FUNCTION BatteryStatus(VAR status: Byte; VAR power: Byte): OSErr ; ; This function will return the current status of the battery on portable Macintoshes. ; ; on entry: 12(SP) - space for function result ; 8(SP) - pointer to ÔstatusÕ ; 4(SP) - pointer to ÔpowerÕ ; 0(SP) - return address ;_______________________________________________________________________________________ BatteryStatus PROC EXPORT WITH pmCommandRec MOVE.L (SP)+,A1 ; pop the return address CLR.L -(SP) ; buffer for flags, power, temperature (, pad) MOVE.L SP,-(SP) ; pmRBuffer CLR.L -(SP) ; pmSBuffer (none) CLR.W -(SP) ; pmLength (no data to send) MOVE.W #batteryRead,-(SP) ; command MOVEA.L SP,A0 ; point to the parameter block _PMgrOp ; get battery info LEA pmRBuffer+4(SP),SP ; toss the parameter block MOVEA.L SP,A0 ; point to the buffer MOVE.B (A0)+,D1 ; get the flags MOVE.B (A0)+,D2 ; and battery power ADDQ.W #4,SP ; toss the buffer MOVEA.L (SP)+,A0 ; get the pointer to ÔpowerÕ MOVE.B D2,(A0) ; and update it MOVEA.L (SP)+,A0 ; get the pointer to ÔstatusÕ MOVE.B D1,(A0) ; and update it MOVE.W D0,(SP) ; save the result JMP (A1) ENDP ;_______________________________________________________________________________________ ; ; FUNCTION ModemStatus(VAR status: Byte): OSErr ; ; This function will return the current setting of the modem on portable Macintoshes. ; ; on entry: 8(SP) - space for function result ; 4(SP) - pointer to ÔstatusÕ (receive buffer) ; 0(SP) - return address ;_______________________________________________________________________________________ ModemStatus PROC EXPORT WITH pmCommandRec MOVE.L (SP)+,A1 ; pop the return address CLR.L -(SP) ; no send buffer CLR.W -(SP) ; no data to send MOVE.W #modemRead,-(SP) ; command MOVEA.L SP,A0 ; point to the parameter block _PMgrOp ; send the command LEA pmRBuffer+4(SP),SP ; toss the parameter block MOVE.W D0,(SP) ; stuff the function result JMP (A1) ENDP END