📄 hello.c
字号:
#include <Pilot.h>
#include <SerialMgr.h>
#include <SysEvtMgr.h>
#include "hello.h"
UInt gSerialRefNum;
char gSerialBuffer[900]; // should be more than enough for one second
// of data -- 10 lines @ 80 chars per line
static Boolean HelloFormEventHandler(EventPtr event)
{
Boolean handled = false;
switch (event->eType)
{
case frmOpenEvent:
FrmDrawForm(FrmGetActiveForm());
handled = true;
break;
case ctlSelectEvent:
if (event->data.ctlSelect.controlID==cmdButton1)
{
char *temp="abc";
Err err;
SerSend(gSerialRefNum, temp, sizeof(temp), &err);
}
handled = true;
break;
case nilEvent:
// we loop until an event occurs, or until
// we update the display
do
{
ULong numBytesPending;
char theData[165]; // two lines; 80 chars with <CR><LF>
// + one for null byte
Err err;
err = SerReceiveWait(gSerialRefNum, sizeof(theData)-1, 2);
if (err == serErrLineErr)
{
SerReceiveFlush(gSerialRefNum, 1); // will clear the error
continue; // go back and try reading again
}
if (err !=serErrTimeOut)
{
ErrFatalDisplayIf (err != 0, "SerReceiveWait");
}
err = SerReceiveCheck(gSerialRefNum, &numBytesPending);
if (err == serErrLineErr)
{
SerReceiveFlush (gSerialRefNum, 1); // will clear the error
continue; // go back and try reading again
}
ErrFatalDisplayIf (err != 0, "SerReceiveCheckFail");
if (numBytesPending > 0)
{
ULong numBytes;
// read however many bytes are waiting
numBytes = SerReceive(gSerialRefNum, theData, numBytesPending, 0,
&err);
if (err == serErrLineErr)
{
SerReceiveFlush (gSerialRefNum, 1); // will clear the error
continue; // go back and try reading again
}
theData[numBytes] = '\0'; // null-terminate theData
{
FormPtr frm = FrmGetActiveForm();
FrmHideObject(frm,FrmGetObjectIndex(frm,cmdLabel));
FrmCopyLabel(frm, cmdLabel, " ");
FrmShowObject(frm,FrmGetObjectIndex(frm,cmdLabel));
FrmCopyLabel(frm, cmdLabel, theData);
}
}
}
while (!EvtSysEventAvail(false));
handled=true;
break;
}
return (handled);
}
static Boolean ApplicationHandleEvent(EventPtr event)
{
FormPtr form;
Word formID;
Boolean handled = false;
if (event->eType == frmLoadEvent) {
formID = event->data.frmLoad.formID;
form = FrmInitForm(formID);
FrmSetActiveForm(form);
switch (formID) {
case formID_hello:
FrmSetEventHandler(form, HelloFormEventHandler);
break;
}
handled = true;
}
return (handled);
}
// UInt gSerialRefNum;
// char gSerialBuffer[900]; // should be more than enough for one second
// of data -- 10 lines @ 80 chars per line
static Boolean StartApplication()
{
Err err;
err = SysLibFind ("Serial Library", &gSerialRefNum);
ErrNonFatalDisplayIf(err !=0, "Can't find serial library");
err = SerOpen(gSerialRefNum, 0, 9600);
if (err != 0)
{
if (err == serErrAlreadyOpen)
{
FrmAlert(SerialInUseAlert);
SerClose(gSerialRefNum);
}
else
{
FrmAlert(CantopenserialAlert);
}
FrmGotoForm(formID_hello);
return false;
}
err = SerSetReceiveBuffer(gSerialRefNum, gSerialBuffer,
sizeof(gSerialBuffer));
FrmAlert(SerialOK);
FrmGotoForm(formID_hello);
return true;
}
static void EventLoop(void)
{
short err;
int formID;
FormPtr form;
EventType event;
do {
EvtGetEvent(&event, 1);
if (SysHandleEvent(&event)) continue;
if (MenuHandleEvent(NULL, &event, &err)) continue;
if (ApplicationHandleEvent(&event)) continue;
FrmDispatchEvent(&event);
} while (event.eType != appStopEvent);
}
static void StopApplication(void)
{
// restore the default buffer before closing the serial port
SerSetReceiveBuffer(gSerialRefNum, NULL, 0);
SerClose(gSerialRefNum);
FrmCloseAllForms();
}
DWord PilotMain (Word cmd, Ptr cmdPBP, Word launchFlags)
{
if (cmd == sysAppLaunchCmdNormalLaunch) {
StartApplication();
EventLoop();
StopApplication();
}
return (0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -