Added GoLCD support

svn-id: r19049
This commit is contained in:
Chris Apers 2005-10-12 20:43:30 +00:00
parent d9527b601e
commit bfa7823a5e
2 changed files with 143 additions and 0 deletions

View File

@ -0,0 +1,121 @@
#include <PalmOS.h>
#include <PalmGoLCD.h>
#include "init_golcd.h"
// you can use this handle directly
MemHandle gGoLcdH;
Err GoLCDInit(MemHandle *goLcdH) {
if (!goLcdH)
return sysErrParamErr;
Err e;
UInt16 refNum;
Boolean loaded = false;
*goLcdH = NULL;
if (e = SysLibFind(goLcdLibName, &refNum))
loaded = !(e = SysLibLoad(goLcdLibType, goLcdLibCreator, &refNum));
if (!e)
if ((e = GoLcdLibOpen(refNum)))
SysLibRemove(refNum);
if (!e) {
MemHandle lcdH = MemHandleNew(sizeof(GoLCDType));
GoLCDType *lcdP = (GoLCDType *)MemHandleLock(lcdH);
MemSet(lcdP, MemHandleSize(lcdH), 0);
lcdP->refNum = refNum;
lcdP->timeout = GoLcdGetTimeout(refNum, goLcdPenTapMode);
MemPtrUnlock(lcdP);
*goLcdH = lcdH;
}
return e;
}
Err GoLCDRelease(MemHandle goLcdH) {
if (!goLcdH)
return sysErrParamErr;
Err e;
GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
if (lcdP->refNum != sysInvalidRefNum)
if (!(e = GoLcdLibClose(lcdP->refNum)))
e = SysLibRemove(lcdP->refNum);
MemPtrUnlock(lcdP);
MemHandleFree(goLcdH);
return e;
}
Boolean GoLCDPointInBounds(MemHandle goLcdH, Coord x, Coord y) {
Boolean inBounds = false;
if (!goLcdH)
return inBounds;
GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
inBounds = (lcdP->active && RctPtInRectangle(x, y, &(lcdP->bounds)));
MemPtrUnlock(lcdP);
return inBounds;
}
void GoLCDSetInk(MemHandle goLcdH, RGBColorType *inkP) {
if (!goLcdH)
return;
GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
MemMove(&(lcdP->ink), inkP, sizeof(RGBColorType));
MemPtrUnlock(lcdP);
}
void GoLCDSetBounds(MemHandle goLcdH, RectangleType *boundsP) {
if (!goLcdH)
return;
GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
MemMove(&(lcdP->bounds), boundsP, sizeof(RectangleType));
MemPtrUnlock(lcdP);
}
void GoLCDActivate(MemHandle goLcdH, Boolean active) {
if (!goLcdH)
return;
GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
if (active) {
if (!lcdP->active) {
lcdP->active = true;
GoLcdSetInkState(lcdP->refNum, goLcdInkEnabled, goLcdColorOverride, &(lcdP->ink));
GoLcdSetBounds(lcdP->refNum, &(lcdP->bounds));
GoLcdSetGsiState(lcdP->refNum, goLcdGsiNormal, goLcdColorDefault, 0);
GoLcdSetTimeout(lcdP->refNum, goLcdPenTapMode, lcdP->timeout);
GoLcdSetStatus(lcdP->refNum, goLcdEnabled);
}
} else {
lcdP->active = false;
GoLcdSetInkState(lcdP->refNum, goLcdInkDisabled, goLcdColorDefault, 0);
GoLcdSetStatus(lcdP->refNum, goLcdDisabled);
}
MemPtrUnlock(lcdP);
}
Boolean GoLCDToggle(MemHandle goLcdH) {
if (!goLcdH)
return;
Boolean active;
GoLCDType *lcdP = (GoLCDType *)MemHandleLock(goLcdH);
active = lcdP->active;
MemPtrUnlock(lcdP);
GoLCDActivate(goLcdH, !active);
return (!active);
}

View File

@ -0,0 +1,22 @@
#ifndef INIT_GOLCD_H
#define INIT_GOLCD_H
typedef struct {
Boolean active;
UInt16 refNum;
RectangleType bounds;
RGBColorType ink;
UInt32 timeout;
} GoLCDType;
extern MemHandle gGoLcdH;
Err GoLCDInit(MemHandle *goLcdH);
Err GoLCDRelease(MemHandle goLcdH);
void GoLCDSetInk(MemHandle goLcdH, RGBColorType *inkP);
void GoLCDSetBounds(MemHandle goLcdH, RectangleType *boundsP);
void GoLCDActivate(MemHandle goLcdH, Boolean active);
Boolean GoLCDToggle(MemHandle goLcdH);
Boolean GoLCDPointInBounds(MemHandle goLcdH, Coord x, Coord y);
#endif