mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-27 10:29:32 +00:00
4325cdcc78
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included. The Tools directory, containing mostly junk, is also excluded.
191 lines
6.6 KiB
C
191 lines
6.6 KiB
C
/*
|
|
File: PWM.c
|
|
|
|
Contains: This file contains the hardware specific routines to control a PWM-based
|
|
interface found on Asahi, TIM, DB-Lite.
|
|
|
|
Written by: Andy Gong x6595
|
|
|
|
Copyright: © 1990-1993 by Apple Computer, Inc., all rights reserved.
|
|
|
|
Change History (most recent first):
|
|
|
|
<SM3> 2/11/93 CSS Update from Horror. Comments follow:
|
|
<H10> 6/30/92 ag Moved cpu depended initialization code to cpu.c file, input
|
|
routines to input.c, and table routines to backlight.c file.
|
|
<H9> 5/26/92 ag Added write to PONTI to turnoff backlight through PONTI bit.
|
|
<H8> 5/7/92 ag Use new table record for min/max limits. Added new entry for
|
|
Dartanian.
|
|
<H7> 4/24/92 ag set default to single table operation except on TIM (LC). added
|
|
new vector for custom input control to handle hardware
|
|
dependencies.
|
|
<H6> 12/17/91 SWC Added boxDBLiteLC to the list in InitPWMControls. Grouped boxTIM
|
|
and boxDartanian since their code is identical.
|
|
<H5> 12/16/91 HJR Added boxDartanian to the list.
|
|
<H4> 9/10/91 SWC Changed Get_AtoD to get the current setting of the up/down
|
|
buttons.
|
|
<H3> 8/27/91 SWC Changed references to get/set contrast to use get/set brightness
|
|
on machines other than TIM. On TIM, they used the contrast
|
|
command to control screen brightness. Added PWM table for
|
|
DB-Lite.
|
|
<H2> 8/5/91 SWC Changed Get_AtoD to use GetScreenCmd to get the current contrast
|
|
instead of reading from the A-D if not on TIM.
|
|
<3> 3/24/92 JSM Nuke boxFlag codenames.
|
|
<2> 3/23/92 JSM OSEvents.h is obsolete, use Events.h.
|
|
<1> 10/24/91 SAM/KSM Rolled in Regatta file.
|
|
|
|
Regatta Change History:
|
|
|
|
<6> 8/29/91 SAM (ag) changed power manager call "BatteryStatusImmCmd" for more
|
|
responsiveness.
|
|
<5> 7/18/91 SAM (ag) changed initialization code. converted to table only brightness
|
|
levels.
|
|
<4> 6/30/91 SAM Merged from TERROR [<4><5><6><7><8>].
|
|
<3> 6/14/91 SAM (ag) Turnoff backlight at close. Changed low power handling
|
|
code, to rescale pot to lower range.
|
|
<1> 5/15/91 SAM Split off from TERRORProj.
|
|
|
|
Terror Change History:
|
|
|
|
<8> 6/27/91 ag fixed bug with init powerbook 100, initialize table based data
|
|
only on table based hardware.
|
|
<7> 6/27/91 ag centralize table determination code "LowTable".
|
|
<6> 6/27/91 ag code clean up.
|
|
<5> 6/26/91 ag added support for table change as a function of charger and
|
|
voltage.
|
|
<4> 6/24/91 ag Changed look up table size to byte elements. Added software
|
|
scale control. Added software setting controls. Added software
|
|
table control.
|
|
<3> 6/10/91 ag Changed low power handling code, to rescale pot to lower range.
|
|
<2> 6/5/91 ag turnoff backlight at close
|
|
*/
|
|
|
|
/*page*/
|
|
/************************************/
|
|
/*** INCLUDE FILES DECLARATIONS ***/
|
|
|
|
|
|
#include <SysEqu.h>
|
|
#include <types.h>
|
|
#include <memory.h>
|
|
#include <Events.h>
|
|
#include <devices.h>
|
|
#include <errors.h>
|
|
#include <retrace.h>
|
|
#include <Shutdown.h>
|
|
#include <stdlib.h>
|
|
|
|
#include "PowerMgr.h"
|
|
#include "backlight.h"
|
|
|
|
/*page
|
|
***************************************************************************************************
|
|
** PWM software ***********************************************************************************
|
|
***************************************************************************************************
|
|
*/
|
|
|
|
OSErr InitPWMControls(driverGlobalPtr globalPtr)
|
|
|
|
{
|
|
unsigned int startvalue;
|
|
|
|
/* initialize dual table variables */
|
|
if (globalPtr->dualTable)
|
|
{
|
|
globalPtr->slewLimit = true; /* maximum change per/accrun */
|
|
(*globalPtr->tableProc)(globalPtr); /* determine table based on current charger state */
|
|
};
|
|
|
|
/* initialize backlight hardware */
|
|
startvalue = (*globalPtr->userInputProc)(globalPtr); /* <H8> */
|
|
globalPtr->userBrightness = -1;
|
|
globalPtr->userBrightness = (*globalPtr->setlevelproc)(startvalue,globalPtr); /* <H8> */
|
|
|
|
return(noErr);
|
|
};
|
|
|
|
/*
|
|
***************************************************************************************************
|
|
*
|
|
*
|
|
***************************************************************************************************
|
|
*/
|
|
int PWMCloseRoutine (driverGlobalPtr globalPtr)
|
|
|
|
{
|
|
(*globalPtr->setlevelproc)(globalPtr->settingTable->minimum,globalPtr);
|
|
return(0);
|
|
};
|
|
|
|
/*page
|
|
***************************************************************************************************
|
|
*
|
|
* The control routineÉ
|
|
*
|
|
* return:
|
|
* noErr - task completed successfully
|
|
* controlErr - illegal control selector
|
|
*
|
|
*
|
|
***************************************************************************************************
|
|
*/
|
|
OSErr PWMControl(CntrlParam *ctlPB,driverGlobalPtr globalPtr) /* 'open' entry point */
|
|
|
|
{
|
|
int error;
|
|
int tempvalue;
|
|
|
|
error = noErr;
|
|
|
|
if (!globalPtr->disableHWinput) /* if hardware not disabled, error */
|
|
error = controlErr;
|
|
else
|
|
switch(ctlPB->csCode)
|
|
{
|
|
case kSetScreenBrightness: /* set brightness level */
|
|
tempvalue = ctlPB->csParam[0];
|
|
globalPtr->userBrightness = (*globalPtr->setlevelproc)(tempvalue,globalPtr);
|
|
break;
|
|
|
|
default:
|
|
error = controlErr;
|
|
};
|
|
|
|
return(error);
|
|
};
|
|
|
|
/*
|
|
***************************************************************************************************
|
|
*
|
|
*
|
|
***************************************************************************************************
|
|
*/
|
|
|
|
int SetPWM(int new,driverGlobalPtr globalPtr)
|
|
{
|
|
PMgrPBlock pb; /* power manager pb */
|
|
unsigned char val; /* hardware value setting */
|
|
|
|
PEG_TO_LIMITS(new, globalPtr->maximumTable[globalPtr->powerRange], globalPtr->settingTable->minimum); /* <H8> use new tables */ /* limit value to valid range */
|
|
val = globalPtr->settingTable->table[new]; /* look up value from table */
|
|
|
|
if ((globalPtr->userBrightness >= 0) && (val == globalPtr->lastHWSetting)) return(new);/* nothing to do; 90/05/15 just turn on; 90/07/02 avoid touching */
|
|
if (globalPtr->slewChange)
|
|
{
|
|
if (abs(globalPtr->lastHWSetting - val) > globalPtr->slewLimit)
|
|
val = globalPtr->lastHWSetting + ((globalPtr->lastHWSetting > val) ? -globalPtr->slewLimit : globalPtr->slewLimit);
|
|
else
|
|
globalPtr->slewChange = false;
|
|
};
|
|
globalPtr->lastHWSetting = val; /* save the new hardware setting */
|
|
|
|
pb.pmgrCmd = SetBrightnessCmd; /* everyone else uses "set brightness" */
|
|
pb.pmgrCnt = 1;
|
|
pb.pmgrXPtr = &val;
|
|
pb.pmgrRPtr = nil;
|
|
PMgr(&pb); /* set the pwm */
|
|
|
|
return(new); /* return the current value */
|
|
};
|
|
|