Dne Thu, 06 Dec 2012 10:16:01 +0100 Clinton Shane Wright
<[email protected]> napsal/-a:
> I am considering having the serData recieved write to a database
> and process each thing stored into the database (or even a stringlist to
> avoid extra problems or complications).
After each input, you should determine of what kind of data
you've received. At least you should distinct between solicited
and unsoliticted data.
Bellow is receiver handler from our SW originally developed in D1
at the very beginning of GSM era. Just for illustration, because
it does not use synaser but asynchronous I/O.
var
Data: ANSIstring;
Line: ANSIstring;
CRidx: integer;
begin
if not Enabled then
exit;
Data := FRxTmpBuffer+RxDataFilter(Port.RxString);
FRxTmpBuffer := sz;
while Data<>sz do
begin
CRidx := pos(#13,Data);
if CRidx<>0 then
begin
Line := copy(Data,1,CRidx-1);
Data := copy(Data,CRidx+1,length(Data)-CRidx);
IOCLog.Log(ThreadName,cmltInp,''''+Line+#13+'''');
// continuous line of unsolicited data
if FRxUnsolLines>0 then
begin
IOCLog.Log(ThreadName,cmltUns,'Unsolicited response');
__RxAddUnsolicited(Line);
end
// echo suppression
else if CompareText(Line,FTxLastCommand)=0 then
begin
IOCLog.LogRsp(ThreadName,'echo, skipped');
end
// Incoming voice indication (providing that there is a
voice support)
else if _RxDataRing(Line) then
begin
IOCLog.LogRsp(ThreadName,'ringing');
_Ringing;
end
// caller identification
else if _RxDataVoice(Line) then
begin
IOCLog.LogRsp(ThreadName,'Voice data recognized');
end
// unsolicited data, enqueue and signal them
else if _RxDataUnsolicited(Line) then
begin
IOCLog.Log(ThreadName,cmltUns,'Unsolicited response');
__RxAddUnsolicited(Line);
end
// Ignored data e.g. RING has occured by voice support is
disabled
else if _RxDataIgnore(Line) then
begin
IOCLog.LogRsp(ThreadName,'ignored');
end
// A command response
else
begin
IOCLog.LogRsp(ThreadName,'response');
_RxAddResponse(Line);
end;
end
// Prompt, which is not terminated by CR, e.g. '> '. It is
converted to and handled as a response
else if _RxDataPrompt(Data) then
begin
IOCLog.Log(ThreadName,cmltInp,''''+Data+'''');
IOCLog.LogRsp(ThreadName,'prompt');
_RxAddResponse(Data);
Data := sz;
end
// Remaining data fragment, keep it in the buffer temporary
else
begin
FRxTmpBuffer := Data;
Data := sz;
end;
end;
end;
------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
synalist-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synalist-public