summaryrefslogtreecommitdiffabout
path: root/gammu/emb/common/phone/pfunc.c
Side-by-side diff
Diffstat (limited to 'gammu/emb/common/phone/pfunc.c') (more/less context) (ignore whitespace changes)
-rw-r--r--gammu/emb/common/phone/pfunc.c138
1 files changed, 138 insertions, 0 deletions
diff --git a/gammu/emb/common/phone/pfunc.c b/gammu/emb/common/phone/pfunc.c
new file mode 100644
index 0000000..a03a81d
--- a/dev/null
+++ b/gammu/emb/common/phone/pfunc.c
@@ -0,0 +1,138 @@
+/* (c) 2002-2003 by Marcin Wiacek */
+
+#include <string.h>
+#include <ctype.h>
+
+#include "../gsmstate.h"
+#include "../service/sms/gsmsms.h"
+#include "../misc/coding/coding.h"
+
+/* These SMS layouts are used exactly as written in Nokia DCT3 phones.
+ * In AT module(s) we have to use some layouts to convert AT frame to format
+ * understod by SMS module. To share source the same layouts are used */
+GSM_SMSMessageLayout PHONE_SMSDeliver = {
+ 35 /* SMS Text */, 16 /* Phone number */,
+ 0 /* SMSC Number */, 14 /* TPDCS */,
+ 28 /* SendingDateTime */, 255 /* SMSCDateTime */,
+ 255 /* TPStatus */, 15 /* TPUDL */,
+ 255 /* TPVP */, 12 /* firstbyte */,
+ 255 /* TPMR */, 13 /* TPPID */};
+GSM_SMSMessageLayout PHONE_SMSSubmit = {
+ 36 /* SMS Text */, 17 /* Phone number */,
+ 0 /* SMSC Number */, 15 /* TPDCS */,
+ 255 /* SendingDateTime */, 255 /* SMSCDateTime */,
+ 255 /* TPStatus */, 16 /* TPUDL */,
+ 29 /* TPVP */, 12 /* firstbyte */,
+ 13 /* TPMR */, 14 /* TPPID */};
+GSM_SMSMessageLayout PHONE_SMSStatusReport = {
+ 255 /* SMS Text */, 15 /* Phone number */,
+ 0 /* SMSC Number */, 255 /* TPDCS */,
+ 27 /* SendingDateTime */, 34 /* SMSCDateTime */,
+ 14 /* TPStatus */, 255 /* TPUDL */,
+ 255 /* TPVP */, 12 /* firstbyte */,
+ 13 /* TPMR */, 255 /* TPPID?? */};
+
+GSM_Error PHONE_GetSMSFolders(GSM_StateMachine *s, GSM_SMSFolders *folders)
+{
+ folders->Number=2;
+ EncodeUnicode(folders->Folder[0].Name,GetMsg(s->msg,"Inbox"),strlen(GetMsg(s->msg,"Inbox")));
+ EncodeUnicode(folders->Folder[1].Name,GetMsg(s->msg,"Outbox"),strlen(GetMsg(s->msg,"Outbox")));
+ folders->Folder[0].InboxFolder = true;
+ folders->Folder[1].InboxFolder = false;
+ folders->Folder[0].Memory = MEM_SM;
+ folders->Folder[1].Memory = MEM_SM;
+ return ERR_NONE;
+}
+
+void GSM_CreateFirmwareNumber(GSM_StateMachine *s)
+{
+ StringToDouble(s->Phone.Data.Version, &s->Phone.Data.VerNum);
+ dbgprintf("Number version is \"%f\"\n", s->Phone.Data.VerNum);
+}
+
+GSM_Error PHONE_EncodeSMSFrame(GSM_StateMachine *s, GSM_SMSMessage *SMS, unsigned char *buffer, GSM_SMSMessageLayout Layout, int *length, bool clear)
+{
+ GSM_Error error;
+
+ if (SMS->SMSC.Location!=0) {
+ error = s->Phone.Functions->GetSMSC(s, &SMS->SMSC);
+ if (error != ERR_NONE) return error;
+ SMS->SMSC.Location = 0;
+ }
+ if (SMS->PDU == SMS_Deliver) {
+ if (SMS->SMSC.Number[0] == 0x00 && SMS->SMSC.Number[1] == 0x00) {
+ return ERR_EMPTYSMSC;
+ }
+ }
+ return GSM_EncodeSMSFrame(SMS, buffer, Layout, length, clear);
+}
+
+GSM_Error PHONE_Terminate(GSM_StateMachine *s)
+{
+ GSM_Error error;
+
+ if (s->Phone.Data.EnableIncomingCB==true) {
+ error=s->Phone.Functions->SetIncomingCB(s,false);
+ if (error!=ERR_NONE) return error;
+ }
+ if (s->Phone.Data.EnableIncomingSMS==true) {
+ error=s->Phone.Functions->SetIncomingSMS(s,false);
+ if (error!=ERR_NONE) return error;
+ }
+ return ERR_NONE;
+}
+
+GSM_Error PHONE_RTTLPlayOneNote(GSM_StateMachine *s, GSM_RingNote note, bool first)
+{
+ int duration, Hz;
+ GSM_Error error;
+
+ Hz=GSM_RingNoteGetFrequency(note);
+
+ error=s->Phone.Functions->PlayTone(s,Hz,5,first);
+ if (error!=ERR_NONE) return error;
+
+ duration = GSM_RingNoteGetFullDuration(note);
+
+ /* Is it correct ? Experimental values here */
+ switch (note.Style) {
+ case StaccatoStyle:
+ my_sleep (7500);
+ error=s->Phone.Functions->PlayTone(s,0,0,false);
+ if (error != ERR_NONE) return error;
+ my_sleep ((1400000/note.Tempo*duration)-(7500));
+ break;
+ case ContinuousStyle:
+ my_sleep (1400000/note.Tempo*duration);
+ break;
+ case NaturalStyle:
+ my_sleep (1400000/note.Tempo*duration-50);
+ error=s->Phone.Functions->PlayTone(s,0,0,false);
+ if (error != ERR_NONE) return error;
+ my_sleep (50);
+ break;
+ }
+ return ERR_NONE;
+}
+
+GSM_Error PHONE_Beep(GSM_StateMachine *s)
+{
+ GSM_Error error;
+
+ error=s->Phone.Functions->PlayTone(s, 4000, 5,true);
+ if (error!=ERR_NONE) return error;
+
+ my_sleep(500);
+
+ return s->Phone.Functions->PlayTone(s,255*255,0,false);
+}
+
+GSM_Error NoneReply(GSM_Protocol_Message msg, GSM_StateMachine *s)
+{
+ smprintf(s,"None answer\n");
+ return ERR_NONE;
+}
+
+/* How should editor hadle tabs in this file? Add editor commands here.
+ * vim: noexpandtab sw=8 ts=8 sts=8:
+ */