summaryrefslogtreecommitdiffabout
path: root/gammu
authorzautrix <zautrix>2004-10-25 08:56:23 (UTC)
committer zautrix <zautrix>2004-10-25 08:56:23 (UTC)
commit62e92aa86b6281b4e4c2a2bdb57f3ceb5a87f4e3 (patch) (side-by-side diff)
treec2b7a41b0c8fffdc0786b84ff86724ea8f08d6a1 /gammu
parentfeff0930372dd51af24dc3b46697e70838277ea5 (diff)
downloadkdepimpi-62e92aa86b6281b4e4c2a2bdb57f3ceb5a87f4e3.zip
kdepimpi-62e92aa86b6281b4e4c2a2bdb57f3ceb5a87f4e3.tar.gz
kdepimpi-62e92aa86b6281b4e4c2a2bdb57f3ceb5a87f4e3.tar.bz2
gammu updates
Diffstat (limited to 'gammu') (more/less context) (ignore whitespace changes)
-rw-r--r--gammu/emb/common/common.pro22
-rw-r--r--gammu/emb/common/commonE.pro14
-rw-r--r--gammu/emb/common/device/serial/ser_djg.c399
-rw-r--r--gammu/emb/common/device/serial/ser_djg.h37
-rw-r--r--gammu/emb/common/device/serial/ser_unx.c27
-rw-r--r--gammu/emb/common/device/serial/ser_w32.c9
-rw-r--r--gammu/emb/common/gsmstate.c7
-rw-r--r--gammu/emb/common/gsmstate.h30
-rw-r--r--gammu/emb/common/phone/alcatel/alcatel.c6
-rw-r--r--gammu/emb/common/phone/at/atgen.c8
-rw-r--r--gammu/emb/common/phone/at/sonyeric.c19
-rw-r--r--gammu/emb/common/phone/nokia/dct3/dct3func.c17
-rw-r--r--gammu/emb/common/phone/nokia/dct3/n0650.c150
-rw-r--r--gammu/emb/common/phone/nokia/dct3/n0650.h18
-rw-r--r--gammu/emb/common/phone/nokia/dct3/n6110.c17
-rw-r--r--gammu/emb/common/phone/nokia/dct3/n7110.c15
-rw-r--r--gammu/emb/common/phone/nokia/dct3/n9210.c6
-rw-r--r--gammu/emb/common/phone/nokia/dct4/n3320.c6
-rw-r--r--gammu/emb/common/phone/nokia/dct4/n3650.c6
-rw-r--r--gammu/emb/common/phone/nokia/dct4/n6510.c142
-rw-r--r--gammu/emb/common/phone/nokia/nauto.c6
-rw-r--r--gammu/emb/common/phone/obex/obexgen.c6
-rw-r--r--gammu/emb/common/phone/pfunc.c1
-rw-r--r--gammu/emb/common/phone/symbian/mroutgen.c6
-rw-r--r--gammu/emb/common/protocol/nokia/fbus2.c10
-rw-r--r--gammu/emb/common/protocol/nokia/fbus2.h9
-rw-r--r--gammu/emb/common/protocol/nokia/phonet.c9
-rw-r--r--gammu/emb/common/protocol/nokia/phonet.h9
-rw-r--r--gammu/emb/common/service/backup/backgen.h2
-rw-r--r--gammu/emb/common/service/backup/backtext.c12
-rw-r--r--gammu/emb/common/service/gsmring.h2
-rw-r--r--gammu/emb/gammu/gammu.c121
-rw-r--r--gammu/emb/gammu/smsd/s_files.c2
-rw-r--r--gammu/emb/gammu/smsd/smsdcore.c31
34 files changed, 1065 insertions, 116 deletions
diff --git a/gammu/emb/common/common.pro b/gammu/emb/common/common.pro
index 797199b..af45382 100644
--- a/gammu/emb/common/common.pro
+++ b/gammu/emb/common/common.pro
@@ -73,3 +73,2 @@ HEADERS += config.h \
device/bluetoth/affix.h \
- device/bluetoth/blue_w32.h \
device/bluetoth/bluetoth.h \
@@ -77,7 +76,3 @@ HEADERS += config.h \
device/irda/irda.h \
- device/irda/irda_unx.h \
- device/irda/irda_w32.h \
device/serial/ser_djg.h \
- device/serial/ser_unx.h \
- device/serial/ser_w32.h \
misc/coding/coding.h \
@@ -113,2 +108,3 @@ HEADERS += config.h \
phone/nokia/dct3/n7110.h \
+ phone/nokia/dct3/n0650.h \
phone/nokia/dct3/n9210.h \
@@ -143,3 +139,2 @@ device/bluetoth/affix.c \
device/bluetoth/bluez.c \
-device/bluetoth/blue_w32.c \
device/bluetoth/bluetoth.c \
@@ -163,2 +158,3 @@ phone/nokia/dct3/n6110.c \
phone/nokia/dct3/n7110.c \
+phone/nokia/dct3/n0650.c \
phone/nokia/dct3/n9210.c \
@@ -183,6 +179,16 @@ MOC_DIR = moc/unix
unix: {
-SOURCES += device/serial/ser_unx.c
+HEADERS += device/serial/ser_unx.h \
+ device/irda/irda_unx.h
+
+SOURCES += device/serial/ser_unx.c \
+
}
win32:{
-SOURCES += device/serial/ser_w32.c
+
+HEADERS += device/serial/ser_w32.h \
+ device/irda/irda_w32.h \
+ device/bluetoth/blue_w32.h
+
+SOURCES += device/serial/ser_w32.c \
+ device/bluetoth/blue_w32.c
}
diff --git a/gammu/emb/common/commonE.pro b/gammu/emb/common/commonE.pro
index f5b559d..1512814 100644
--- a/gammu/emb/common/commonE.pro
+++ b/gammu/emb/common/commonE.pro
@@ -73,3 +73,2 @@ HEADERS += config.h \
device/bluetoth/affix.h \
- device/bluetoth/blue_w32.h \
device/bluetoth/bluetoth.h \
@@ -78,6 +77,4 @@ HEADERS += config.h \
device/irda/irda_unx.h \
- device/irda/irda_w32.h \
device/serial/ser_djg.h \
device/serial/ser_unx.h \
- device/serial/ser_w32.h \
misc/coding/coding.h \
@@ -116,2 +113,3 @@ HEADERS += config.h \
phone/nokia/dct4/n3320.h \
+ phone/nokia/dct3/n0650.h \
phone/nokia/dct4/n3650.h \
@@ -143,3 +141,2 @@ device/bluetoth/affix.c \
device/bluetoth/bluez.c \
-device/bluetoth/blue_w32.c \
device/bluetoth/bluetoth.c \
@@ -169,2 +166,3 @@ phone/nokia/dct4/n3650.c \
phone/nokia/dct4/n6510.c \
+phone/nokia/dct3/n0650.c \
phone/nokia/dct4/dct4func.c \
@@ -181 +179,9 @@ MOC_DIR = moc/$(PLATFORM)
CONFIG = warn_off release console
+
+
+
+
+ # device/bluetoth/blue_w32.h \
+ # device/irda/irda_w32.h \
+ # device/serial/ser_w32.h \
+ # device/bluetoth/blue_w32.c \ \ No newline at end of file
diff --git a/gammu/emb/common/device/serial/ser_djg.c b/gammu/emb/common/device/serial/ser_djg.c
index 2524187..609deb8 100644
--- a/gammu/emb/common/device/serial/ser_djg.c
+++ b/gammu/emb/common/device/serial/ser_djg.c
@@ -1 +1,6 @@
+/* Some sources from SVAsync (c) 1996, 1997, Samuel Vincent
+ * 7337 Carioca Ct, Rohnert Park, Ca 94928
+ * "you may freely use it in your programs without paying me anything"
+ */
+/* Some sources from DZCOMM */
@@ -7,9 +12,190 @@
#include "../../gsmcomon.h"
+#include "../../misc/coding/coding.h"
#include "ser_djg.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <dos.h>
+#include <dpmi.h>
+#include <pc.h>
+#include <go32.h>
+#include <sys/farptr.h>
+#include <sys/movedata.h>
+#include <conio.h>
+
+extern unsigned short __djgpp_ds_alias;
+extern void SVAsyncProtISR(void);
+
+static unsigned char SVAsyncStatus=0;
+
+static void lock_interrupt_memory(void);
+static void unlock_interrupt_memory(void);
+
+#define Ctrl8259_0 0x020 /* 8259 port */
+#define Ctrl8259_1 0x021 /* 8259 port (Masks) */
+#define BufSize 32768 /* Buffer Size */
+
+static unsigned char VectorNum; /* Vector Number */
+static unsigned char EnableIRQ; /* Mask to enable 8259 IRQ */
+static unsigned char DisableIRQ; /* Mask to disable 8259 IRQ */
+static _go32_dpmi_seginfo ProtVector; /* Old Protmode Vector */
+static _go32_dpmi_seginfo info; /* New Protmode Vector */
+
+/* Register Addresses for the UART */
+static unsigned short Port; /* Port Base Address */
+unsigned short THR; /* Transmitter Holding Register */
+unsigned short RDR; /* Reciever Data Register */
+unsigned short BRDL; /* Baud Rate Divisor, Low byte */
+unsigned short BRDH; /* Baud Rate Divisor, High Byte */
+unsigned short IER; /* Interupt Enable Register */
+unsigned short IIR; /* Interupt Identification Register */
+unsigned short FCR; /* FIFO Control Register */
+unsigned short LCR; /* Line Control Register */
+unsigned short MCR; /* Modem Control Register */
+unsigned short LSR; /* Line Status Register */
+unsigned short MSR; /* Modem Status Register */
+unsigned short SCR; /* SCR Register */
+
+/* Data Buffer */
+unsigned volatile char RecBuffer[BufSize] = { 0 };
+unsigned volatile int RecHead, RecTail;
+
+/* This uninstalls the ISR and resets the serial port. */
+static void SVAsyncStop(void)
+{
+ if(!SVAsyncStatus) return;
+ SVAsyncStatus = 0;
+
+ /***** Mask (disable) 8259 IRQ Interrupt */
+ outportb(Ctrl8259_1, (inportb(Ctrl8259_1) | DisableIRQ));
+
+ /***** Disable 8250 interrupt */
+ outportb(LCR, (inportb(LCR) & 0x7F));
+ outportb(IER, 0);
+
+ /***** Set bit 3 in MCR to 0 */
+ outportb(MCR, (inportb(MCR) & 0xF7));
+
+ /***** Interrupts are disabled. Restore saved interrupt vector. */
+ _go32_dpmi_set_protected_mode_interrupt_vector(VectorNum, &ProtVector);
+}
+
+/* This will empty the receive buffer */
+static void SVAsyncClear(void)
+{
+ disable();
+ RecHead = 0;
+ RecTail = 0;
+ enable();
+}
+
+
+/* Sets communication parameters
+ * Baud = 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 28800, 38400, 57600
+ * Control = The value to place in the LCR
+ */
+void SVAsyncSet(unsigned int Baud, unsigned int Control)
+{
+ int divisor;
+ unsigned char divlow, divhigh;
+
+ if (!Baud) return;
+
+ divisor = 115200 / Baud;
+
+ disable();
+
+ outportb(LCR, Control | 0x80); /* Set Port Toggle to BRDL/BRDH registers */
+ divlow = divisor & 0x000000ff;
+ divhigh = (divisor >> 8) & 0x000000ff;
+ outportb(BRDL, divlow); /* Set Baud Rate */
+ outportb(BRDH, divhigh);
+
+ outportb(LCR, Control & 0x007F); /* Set LCR and Port Toggle */
+
+ enable();
+}
+
+/* Sets various handshaking lines */
+void SVAsyncHand(unsigned int Hand)
+{
+ outportb(MCR, Hand | 0x08); /* Keep interrupt enable ON */
+}
+
+static void lock_interrupt_memory(void)
+{
+ int errval;
+ __dpmi_meminfo info;
+ unsigned long address;
+
+ __dpmi_get_segment_base_address(_my_ds(), &address);
+
+ info.address = (int) address + (int) &RDR;
+ info.size = sizeof(RDR);
+ errval = __dpmi_lock_linear_region(&info);
+ if(errval == -1) printf("Error in locking memory\n!");
+
+ info.address = (int) address + (int) &LSR;
+ info.size = sizeof(LSR);
+ errval = __dpmi_lock_linear_region(&info);
+ if(errval == -1) printf("Error in locking memory\n!");
+
+ info.address = (int) address + (int) &RecHead;
+ info.size = sizeof(RecHead);
+ errval = __dpmi_lock_linear_region(&info);
+ if(errval == -1) printf("Error in locking memory\n!");
+
+ info.address = (int) address + (int) &RecBuffer;
+ info.size = sizeof(RecBuffer);
+ errval = __dpmi_lock_linear_region(&info);
+ if(errval == -1) printf("Error in locking memory\n!");
+
+ info.address = (int) address + (int) RecBuffer;
+ info.size = BufSize;
+ errval = __dpmi_lock_linear_region(&info);
+ if(errval == -1) printf("Error in locking memory\n!");
+
+ __dpmi_get_segment_base_address(_my_cs(), &address);
+
+ info.address = (int) address + (int) SVAsyncProtISR;
+ info.size = 4096; /* 4096 bytes is probably overkill. */
+ errval = __dpmi_lock_linear_region(&info);
+ if(errval == -1) printf("Error in locking memory\n!");
+}
+
+static void unlock_interrupt_memory(void)
+{
+ __dpmi_meminfo info;
+ unsigned long address;
+
+ __dpmi_get_segment_base_address(_my_ds(), &address);
+ info.address = (int) address + (int) &RDR;
+ info.size = sizeof(RDR);
+ __dpmi_unlock_linear_region(&info);
+ info.address = (int) address + (int) &LSR;
+ info.size = sizeof(LSR);
+ __dpmi_unlock_linear_region(&info);
+ info.address = (int) address + (int) &RecHead;
+ info.size = sizeof(RecHead);
+ __dpmi_unlock_linear_region(&info);
+ info.address = (int) address + (int) &RecBuffer;
+ info.size = sizeof(RecBuffer);
+ __dpmi_unlock_linear_region(&info);
+ info.address = (int) address + (int) RecBuffer;
+ info.size = BufSize;
+ __dpmi_unlock_linear_region(&info);
+
+ __dpmi_get_segment_base_address(_my_cs(), &address);
+
+ info.address = (int) address + (int) SVAsyncProtISR;
+ info.size = 4096; /* probably overkill */
+ __dpmi_unlock_linear_region(&info);
+}
+
static GSM_Error serial_close(GSM_StateMachine *s)
{
- GSM_Device_SerialData *d = &s->Device.Data.Serial;
+ SVAsyncStop();
- return ERR_NOTIMPLEMENTED;
+ return ERR_NONE;
}
@@ -18,5 +204,154 @@ static GSM_Error serial_open (GSM_StateMachine *s)
{
- GSM_Device_SerialData *d = &s->Device.Data.Serial;
-
- return ERR_NOTIMPLEMENTED;
+ GSM_Device_SerialData *d = &s->Device.Data.Serial;
+ unsigned char temp;
+ int i;
+
+ /**** Set various things according to com port number */
+ if (mystrncasecmp(s->CurrentConfig->Device,"com1:",0)) {
+ Port = 0x03F8;
+ VectorNum = 0x0C;
+ EnableIRQ = 0xEF;
+ DisableIRQ = 0x10;
+ } else if (mystrncasecmp(s->CurrentConfig->Device,"com2:",0)) {
+ Port = 0x02F8;
+ VectorNum = 0x0B;
+ EnableIRQ = 0xF7;
+ DisableIRQ = 0x08;
+ } else if (mystrncasecmp(s->CurrentConfig->Device,"com3:",0)) {
+ Port = 0x03E8;
+ VectorNum = 0x0C;
+ EnableIRQ = 0xEF;
+ DisableIRQ = 0x10;
+ } else if (mystrncasecmp(s->CurrentConfig->Device,"com4:",0)) {
+ Port = 0x02E8;
+ VectorNum = 0x0B;
+ EnableIRQ = 0xF7;
+ DisableIRQ = 0x08;
+ } else return ERR_NOTSUPPORTED;
+
+ /**** Compute Register locations */
+ THR = Port;
+ RDR = Port;
+ BRDL = Port;
+ BRDH = 1 + Port;
+ IER = 1 + Port;
+ IIR = 2 + Port;
+ FCR = 2 + Port;
+ LCR = 3 + Port;
+ MCR = 4 + Port;
+ LSR = 5 + Port;
+ MSR = 6 + Port;
+ SCR = 7 + Port;
+
+ /***** Initalize Buffer */
+ SVAsyncClear();
+
+ lock_interrupt_memory();
+ atexit(unlock_interrupt_memory);
+ /***** Set bit 3 in MCR to 0 */
+ outportb(MCR, (inportb(MCR) & 0xF7));
+
+ /*** Save and reassign interrupt vectors */
+
+ _go32_dpmi_get_protected_mode_interrupt_vector(VectorNum, &ProtVector);
+
+ info.pm_offset = (int) SVAsyncProtISR;
+ info.pm_selector = _my_cs();
+ _go32_dpmi_set_protected_mode_interrupt_vector(VectorNum, &info);
+
+ atexit(SVAsyncStop);
+
+ /***** Enable 8259 interrupt (IRQ) line for this async adapter */
+ outportb(Ctrl8259_1, (inportb(Ctrl8259_1) & EnableIRQ));
+
+ /***** Enable 8250 Interrupt-on-data-ready */
+ outportb(LCR, (inportb(LCR) & 0x7F));
+
+ outportb(IER, 0);
+ if (inportb(IER)) {
+ SVAsyncStatus = 0;
+ return ERR_UNKNOWN;
+ }
+ outportb(IER, 0x01);
+
+ /***** Clear 8250 Status and data registers */
+ do {
+ temp=inportb(RDR);
+ temp=inportb(LSR);
+ temp=inportb(MSR);
+ temp=inportb(IIR);
+ } while(!(temp & 1));
+
+ /***** Set Bit 3 of MCR -- Enable interupts */
+ outportb(MCR, (inportb(MCR) | 0x08));
+
+ SVAsyncStatus = 1;
+ /***** Clear Buffer Just in case */
+ SVAsyncClear();
+
+ /* Code based on stuff from SVAsync lib.
+ * Clear UART Status and data registers
+ * setting up FIFO if possible
+ */
+ outportb(SCR, 0x55);
+ if (inportb(SCR) == 0x55) {
+ /* On the off chance that SCR is actually hardwired to 0x55,
+ * do the same check with a different value.
+ */
+ outportb(SCR, 0xAA);
+ if (inportb(SCR) == 0xAA) {
+ /* The chip is better than an 8250 - it has a scratch pad */
+ outportb(SCR, i); /* Set SCR back to what it was before */
+ inportb(SCR); /* Give slow motherboards a chance */
+
+ /* Is there a FIFO ? - go through twice for slow motherboards */
+ outportb(FCR, 0x01);
+ i = inportb(FCR);
+ outportb(FCR, 0x01);
+ i = inportb(FCR);
+
+ /* Some old stuff relies on this (no idea why) */
+ outportb(FCR, 0x00);
+ inportb(FCR); /* Give slow motherboards a chance */
+
+ if ((i&0x80) == 0) {
+ smprintf(s,"UART 16450 or UART 8250 with scratch pad\n");
+ } else if ((i&0x40) == 0) {
+ smprintf(s,"UART 16550 - broken FIFO\n");
+ } else {
+ /* It's a 16450A series : try and start the FIFO.
+ * It appears that some chips need a two call protocol, but
+ * those that don't seem to work even if you do start it
+ * twice. The first call is simply to start it, the second
+ * starts it and sets an 8 byte FIFO trigger level.
+ */
+ outportb(FCR, 0x01);
+ inportb(FCR); /* Give slow motherboards a chance */
+ outportb(FCR, 0x87);
+ inportb(FCR); /* Give slow motherboards a chance */
+
+ /* Check that the FIFO initialised */
+ if ((inportb(IIR) & 0xc0) != 0xc0) {
+ /*
+ * It didn't so we assume it isn't there but disable it to
+ * be on the safe side.
+ */
+ outportb(IIR, 0xfe);
+ inportb(IIR); /* Give slow motherboards a chance */
+ smprintf(s,"UART 16450A - FIFO disabled\n");
+ } else {
+ smprintf(s,"UART 16450A - FIFO enabled\n");
+ }
+ }
+ } else {
+ smprintf(s,"UART 8250\n");
+ }
+ }
+
+ d->Control = BITS_8 | STOP_1;
+ d->Parity = false;
+ d->Speed = 9600;
+ SVAsyncSet(d->Speed,d->Control | NO_PARITY);
+
+ return ERR_NONE;
}
@@ -27,3 +362,11 @@ static GSM_Error serial_setparity(GSM_StateMachine *s, bool parity)
- return ERR_NOTIMPLEMENTED;
+ d->Parity = parity;
+
+ if (parity) {
+ SVAsyncSet(d->Speed, d->Control | ODD_PARITY);
+ } else {
+ SVAsyncSet(d->Speed, d->Control | NO_PARITY);
+ }
+
+ return ERR_NONE;
}
@@ -32,5 +375,13 @@ static GSM_Error serial_setdtrrts(GSM_StateMachine *s, bool dtr, bool rts)
{
- GSM_Device_SerialData *d = &s->Device.Data.Serial;
+ if (dtr && rts) {
+ SVAsyncHand(DTR | RTS);
+ } else if (dtr) {
+ SVAsyncHand(DTR);
+ } else if (rts) {
+ SVAsyncHand(RTS);
+ } else {
+ SVAsyncHand(0);
+ }
- return ERR_NOTIMPLEMENTED;
+ return ERR_NONE;
}
@@ -41,17 +392,35 @@ static GSM_Error serial_setspeed(GSM_StateMachine *s, int speed)
- return ERR_NOTIMPLEMENTED;
+ d->Speed = speed;
+
+ if (d->Parity) {
+ SVAsyncSet(d->Speed, d->Control | ODD_PARITY);
+ } else {
+ SVAsyncSet(d->Speed, d->Control | NO_PARITY);
+ }
+
+ return ERR_NONE;
}
-static int serial_read(GSM_StateMachine *s, void *buf, size_t nbytes)
+static int serial_read(GSM_StateMachine *s, char *buf, size_t nbytes)
{
- GSM_Device_SerialData *d = &s->Device.Data.Serial;
+ if(RecTail == RecHead) return 0;
+
+ disable();
+ buf[0] = RecBuffer[RecTail++];
+ if(RecTail >= BufSize) RecTail = 0;
+ enable();
- return 0;
+ return 1;
}
-static int serial_write(GSM_StateMachine *s, void *buf, size_t nbytes)
+static int serial_write(GSM_StateMachine *s, char *buf, size_t nbytes)
{
- GSM_Device_SerialData *d = &s->Device.Data.Serial;
+ int i;
+
+ for (i=0;i<nbytes;i++) {
+ while(~inportb(LSR) & 0x20);
+ outportb(THR, buf[i]);
+ }
- return 0;
+ return i;
}
diff --git a/gammu/emb/common/device/serial/ser_djg.h b/gammu/emb/common/device/serial/ser_djg.h
index b35b282..3bb2a5b 100644
--- a/gammu/emb/common/device/serial/ser_djg.h
+++ b/gammu/emb/common/device/serial/ser_djg.h
@@ -1 +1,5 @@
+/* Some sources from SVAsync (c) 1996, 1997, Samuel Vincent
+ * 7337 Carioca Ct, Rohnert Park, Ca 94928
+ * "you may freely use it in your programs without paying me anything"
+ */
@@ -6,5 +10,36 @@
typedef struct {
- int hPhone;
+ int hPhone;
+ int Speed;
+ unsigned int Control;
+ bool Parity;
} GSM_Device_SerialData;
+/* Defines for Com Port Paramaters, the second paramater to SVAsyncSet() */
+#define BITS_8 0x03
+#define BITS_7 0x02
+#define STOP_1 0x00
+#define STOP_2 0x04
+#define EVEN_PARITY 0x18
+#define ODD_PARITY 0x08
+#define NO_PARITY 0x00
+
+/* Defines for SVAsyncHand() */
+#define DTR 0x01
+#define RTS 0x02
+#define USER 0x04
+#define LOOPBACK 0x10
+
+/* Defines for SVAsyncStat() */
+#define D_CTS 0x0100
+#define D_DSR 0x0200
+#define D_RI 0x0400
+#define D_DCD 0x0800
+#define CTS 0x1000
+#define DSR 0x2000
+#define RI 0x4000
+#define DCD 0x8000
+#define PARITY 0x0004
+#define THREMPTY 0x0020
+#define BREAKDET 0x1000
+
#endif
diff --git a/gammu/emb/common/device/serial/ser_unx.c b/gammu/emb/common/device/serial/ser_unx.c
index 69c7515..18b5f6f 100644
--- a/gammu/emb/common/device/serial/ser_unx.c
+++ b/gammu/emb/common/device/serial/ser_unx.c
@@ -6,2 +6,11 @@
*/
+/* Due to a problem in the source code management, the names of some of
+ * the authors have unfortunately been lost. We do not mean to belittle
+ * their efforts and hope they will contact us to see their names
+ * properly added to the Copyright notice above.
+ * Having published their contributions under the terms of the GNU
+ * General Public License (GPL) [version 2], the Copyright of these
+ * authors will remain respected by adhering to the license they chose
+ * to publish their code under.
+ */
@@ -62,4 +71,4 @@ static GSM_Error serial_open (GSM_StateMachine *s)
GSM_Device_SerialData *d = &s->Device.Data.Serial;
- struct termios t;
- int i;
+ struct termios t;
+ int i;
@@ -126,3 +135,3 @@ static GSM_Error serial_setparity(GSM_StateMachine *s, bool parity)
GSM_Device_SerialData *d = &s->Device.Data.Serial;
- struct termios t;
+ struct termios t;
@@ -152,4 +161,4 @@ static GSM_Error serial_setdtrrts(GSM_StateMachine *s, bool dtr, bool rts)
GSM_Device_SerialData *d = &s->Device.Data.Serial;
- struct termios t;
- unsigned int flags;
+ struct termios t;
+ unsigned int flags;
@@ -266,4 +275,4 @@ static int serial_read(GSM_StateMachine *s, void *buf, size_t nbytes)
struct timeval timeout2;
- fd_set readfds;
- int actual = 0;
+ fd_set readfds;
+ int actual = 0;
@@ -285,4 +294,4 @@ static int serial_write(GSM_StateMachine *s, void *buf, size_t nbytes)
GSM_Device_SerialData *d = &s->Device.Data.Serial;
- int ret;
- size_t actual = 0;
+ int ret;
+ size_t actual = 0;
diff --git a/gammu/emb/common/device/serial/ser_w32.c b/gammu/emb/common/device/serial/ser_w32.c
index 7d88fc7..a7919fe 100644
--- a/gammu/emb/common/device/serial/ser_w32.c
+++ b/gammu/emb/common/device/serial/ser_w32.c
@@ -6,2 +6,11 @@
*/
+/* Due to a problem in the source code management, the names of some of
+ * the authors have unfortunately been lost. We do not mean to belittle
+ * their efforts and hope they will contact us to see their names
+ * properly added to the Copyright notice above.
+ * Having published their contributions under the terms of the GNU
+ * General Public License (GPL) [version 2], the Copyright of these
+ * authors will remain respected by adhering to the license they chose
+ * to publish their code under.
+ */
diff --git a/gammu/emb/common/gsmstate.c b/gammu/emb/common/gsmstate.c
index 31e365d..c65dc01 100644
--- a/gammu/emb/common/gsmstate.c
+++ b/gammu/emb/common/gsmstate.c
@@ -556,3 +556,3 @@ static GSM_Error CheckReplyFunctions(GSM_StateMachine *s, GSM_Reply_Function *Re
int i = 0;
-// int j;
+// int j;
@@ -872,2 +872,3 @@ static OnePhoneModel allmodels[] = {
{"3100b","RH-50" ,"", {F_PBKTONEGAL,F_PBKSMSLIST,0}},//fixme
+ {"3105" ,"RH-48" ,"Nokia 3105", {F_PBKTONEGAL,F_PBKSMSLIST,F_VOICETAGS,0}},//fixme
{"3108", "RH-6", "Nokia 3108", {0}}, //does it have irda ?
@@ -956,4 +957,4 @@ static OnePhoneModel allmodels[] = {
{"6800" ,"NHL-6" ,"Nokia 6800", {F_PBKTONEGAL,F_TODO66,F_RADIO,F_PBKSMSLIST,0}},
- {"6810" ,"RM-2" ,"Nokia 6810", {F_PBKTONEGAL,F_TODO66,F_RADIO,F_PBKSMSLIST,0}},//quess
- {"6820" ,"NHL-9" ,"Nokia 6820", {F_PBKTONEGAL,F_TODO66,F_RADIO,F_PBKSMSLIST,0}},//quess
+ {"6810" ,"RM-2" ,"Nokia 6810", {F_PBKTONEGAL,F_TODO66,F_RADIO,F_PBKSMSLIST,F_NOTES,0}},//quess
+ {"6820" ,"NHL-9" ,"Nokia 6820", {F_PBKTONEGAL,F_TODO66,F_PBKSMSLIST,F_NOTES,0}},//quess
#endif
diff --git a/gammu/emb/common/gsmstate.h b/gammu/emb/common/gsmstate.h
index 2b4806c..6861fbc 100644
--- a/gammu/emb/common/gsmstate.h
+++ b/gammu/emb/common/gsmstate.h
@@ -380,2 +380,3 @@ typedef enum {
ID_GetNote,
+ ID_SetNote,
ID_GetSignalQuality,
@@ -1292,5 +1293,30 @@ typedef struct {
/**
- * Gets note.
+ * Retrieves notes status (number of used entries).
*/
- GSM_Error (*GetNextNote) (GSM_StateMachine *s, GSM_NoteEntry *Note, bool refresh);
+ GSM_Error (*GetNotesStatus) (GSM_StateMachine *s, GSM_ToDoStatus *status);
+ /**
+ * Retrieves notes entry.
+ */
+ GSM_Error (*GetNote) (GSM_StateMachine *s, GSM_NoteEntry *Note);
+ /**
+ * Retrieves note entry. This is useful for continuous reading of all
+ * notes entries.
+ */
+ GSM_Error (*GetNextNote) (GSM_StateMachine *s, GSM_NoteEntry *Note, bool start);
+ /**
+ * Sets note entry
+ */
+ GSM_Error (*SetNote) (GSM_StateMachine *s, GSM_NoteEntry *Note);
+ /**
+ * Adds note entry.
+ */
+ GSM_Error (*AddNote) (GSM_StateMachine *s, GSM_NoteEntry *Note);
+ /**
+ * Deletes note entry.
+ */
+ GSM_Error (*DeleteNote) (GSM_StateMachine *s, GSM_NoteEntry *Note);
+ /**
+ * Deletes all notes entries.
+ */
+ GSM_Error (*DeleteAllNotes) (GSM_StateMachine *s);
/**
diff --git a/gammu/emb/common/phone/alcatel/alcatel.c b/gammu/emb/common/phone/alcatel/alcatel.c
index 3821f13..b75077f 100644
--- a/gammu/emb/common/phone/alcatel/alcatel.c
+++ b/gammu/emb/common/phone/alcatel/alcatel.c
@@ -3981,3 +3981,9 @@ GSM_Phone_Functions ALCATELPhone = {
NOTSUPPORTED, /* SetCalendarSettings */
+ NOTSUPPORTED, /* GetNoteStatus */
+ NOTSUPPORTED, /* GetNote */
NOTSUPPORTED, /* GetNextNote */
+ NOTSUPPORTED, /* SetNote */
+ NOTSUPPORTED, /* AddNote */
+ NOTSUPPORTED, /* DeleteNote */
+ NOTSUPPORTED, /* DeleteAllNotes */
NOTSUPPORTED, /* GetProfile */
diff --git a/gammu/emb/common/phone/at/atgen.c b/gammu/emb/common/phone/at/atgen.c
index ba23eb2..a875f0a 100644
--- a/gammu/emb/common/phone/at/atgen.c
+++ b/gammu/emb/common/phone/at/atgen.c
@@ -698,3 +698,3 @@ GSM_Error ATGEN_SetSMSC(GSM_StateMachine *s, GSM_SMSC *smsc)
- if (smsc->Location!=1) return ERR_NOTSUPPORTED;
+ if (smsc->Location!=1) return ERR_INVALIDLOCATION;
@@ -3841,3 +3841,9 @@ GSM_Phone_Functions ATGENPhone = {
NOTSUPPORTED, /* SetCalendarSettings */
+ NOTSUPPORTED, /* GetNoteStatus */
+ NOTSUPPORTED, /* GetNote */
NOTSUPPORTED, /* GetNextNote */
+ NOTSUPPORTED, /* SetNote */
+ NOTSUPPORTED, /* AddNote */
+ NOTSUPPORTED, /* DeleteNote */
+ NOTSUPPORTED, /* DeleteAllNotes */
NOTSUPPORTED, /* GetProfile */
diff --git a/gammu/emb/common/phone/at/sonyeric.c b/gammu/emb/common/phone/at/sonyeric.c
index 8eeb39b..363e043 100644
--- a/gammu/emb/common/phone/at/sonyeric.c
+++ b/gammu/emb/common/phone/at/sonyeric.c
@@ -16,3 +16,3 @@
-#ifdef GSM_ENABLE_OBEXGEN
+#if defined(GSM_ENABLE_BLUEOBEX) || defined(GSM_ENABLE_IRDAOBEX)
@@ -20,2 +20,3 @@
+extern GSM_Protocol_Functions OBEXProtocol;
extern GSM_Reply_Function OBEXGENReplyFunctions[];
@@ -126,3 +127,3 @@ GSM_Error SONYERIC_GetNextCalendar(GSM_StateMachine *s, GSM_CalendarEntry *Note,
{
-#ifdef GSM_ENABLE_OBEXGEN
+#if defined(GSM_ENABLE_BLUEOBEX) || defined(GSM_ENABLE_IRDAOBEX)
GSM_Error error;
@@ -162,3 +163,3 @@ GSM_Error SONYERIC_GetNextToDo(GSM_StateMachine *s, GSM_ToDoEntry *ToDo, bool st
{
-#ifdef GSM_ENABLE_OBEXGEN
+#if defined(GSM_ENABLE_BLUEOBEX) || defined(GSM_ENABLE_IRDAOBEX)
GSM_Error error;
@@ -201,3 +202,3 @@ GSM_Error SONYERIC_GetToDoStatus(GSM_StateMachine *s, GSM_ToDoStatus *status)
{
-#ifdef GSM_ENABLE_OBEXGEN
+#if defined(GSM_ENABLE_BLUEOBEX) || defined(GSM_ENABLE_IRDAOBEX)
GSM_Error error;
@@ -232,3 +233,3 @@ GSM_Error SONYERIC_AddCalendarNote(GSM_StateMachine *s, GSM_CalendarEntry *Note)
{
-#ifdef GSM_ENABLE_OBEXGEN
+#if defined(GSM_ENABLE_BLUEOBEX) || defined(GSM_ENABLE_IRDAOBEX)
unsigned char req[5000];
@@ -248,3 +249,3 @@ GSM_Error SONYERIC_AddToDo(GSM_StateMachine *s, GSM_ToDoEntry *ToDo)
{
-#ifdef GSM_ENABLE_OBEXGEN
+#if defined(GSM_ENABLE_BLUEOBEX) || defined(GSM_ENABLE_IRDAOBEX)
GSM_Phone_ATGENData *Priv = &s->Phone.Data.Priv.ATGEN;
@@ -267,3 +268,3 @@ GSM_Error SONYERIC_DeleteAllToDo(GSM_StateMachine *s)
{
-#ifdef GSM_ENABLE_OBEXGEN
+#if defined(GSM_ENABLE_BLUEOBEX) || defined(GSM_ENABLE_IRDAOBEX)
GSM_Error error;
@@ -319,3 +320,3 @@ GSM_Error SONYERIC_DelCalendarNote(GSM_StateMachine *s, GSM_CalendarEntry *Note)
{
-#ifdef GSM_ENABLE_OBEXGEN
+#if defined(GSM_ENABLE_BLUEOBEX) || defined(GSM_ENABLE_IRDAOBEX)
GSM_Error error;
@@ -374,3 +375,3 @@ GSM_Error SONYERIC_GetCalendarStatus(GSM_StateMachine *s, GSM_CalendarStatus *St
{
-#ifdef GSM_ENABLE_OBEXGEN
+#if defined(GSM_ENABLE_BLUEOBEX) || defined(GSM_ENABLE_IRDAOBEX)
GSM_Error error;
diff --git a/gammu/emb/common/phone/nokia/dct3/dct3func.c b/gammu/emb/common/phone/nokia/dct3/dct3func.c
index 17cd0a4..9810a35 100644
--- a/gammu/emb/common/phone/nokia/dct3/dct3func.c
+++ b/gammu/emb/common/phone/nokia/dct3/dct3func.c
@@ -6,2 +6,11 @@
*/
+/* Due to a problem in the source code management, the names of some of
+ * the authors have unfortunately been lost. We do not mean to belittle
+ * their efforts and hope they will contact us to see their names
+ * properly added to the Copyright notice above.
+ * Having published their contributions under the terms of the GNU
+ * General Public License (GPL) [version 2], the Copyright of these
+ * authors will remain respected by adhering to the license they chose
+ * to publish their code under.
+ */
@@ -459,6 +468,6 @@ GSM_Error DCT3_ReplyGetNetworkInfo(GSM_Protocol_Message msg, GSM_StateMachine *s
if (msg.Buffer[8]<0x03) {
- sprintf(NetInfo.CID, "%02x%02x", msg.Buffer[10], msg.Buffer[11]);
+ sprintf(NetInfo.CID, "%02X%02X", msg.Buffer[10], msg.Buffer[11]);
smprintf(s, "CID : %s\n", NetInfo.CID);
- sprintf(NetInfo.LAC, "%02x%02x", msg.Buffer[12], msg.Buffer[13]);
+ sprintf(NetInfo.LAC, "%02X%02X", msg.Buffer[12], msg.Buffer[13]);
smprintf(s, "LAC : %s\n", NetInfo.LAC);
@@ -513,4 +522,4 @@ GSM_Error DCT3_ReplyGetNetworkInfo(GSM_Protocol_Message msg, GSM_StateMachine *s
NOKIA_DecodeNetworkCode(msg.Buffer+14,Data->NetworkInfo->NetworkCode);
- sprintf(Data->NetworkInfo->CID, "%02x%02x", msg.Buffer[10], msg.Buffer[11]);
- sprintf(Data->NetworkInfo->LAC, "%02x%02x", msg.Buffer[12], msg.Buffer[13]);
+ sprintf(Data->NetworkInfo->CID, "%02X%02X", msg.Buffer[10], msg.Buffer[11]);
+ sprintf(Data->NetworkInfo->LAC, "%02X%02X", msg.Buffer[12], msg.Buffer[13]);
}
diff --git a/gammu/emb/common/phone/nokia/dct3/n0650.c b/gammu/emb/common/phone/nokia/dct3/n0650.c
new file mode 100644
index 0000000..3899a16
--- a/dev/null
+++ b/gammu/emb/common/phone/nokia/dct3/n0650.c
@@ -0,0 +1,150 @@
+/* (c) 2004 by Marcin Wiacek */
+
+#include <string.h>
+#include <time.h>
+
+#include "../../../gsmcomon.h"
+#include "../../../gsmstate.h"
+#include "../nfunc.h"
+
+#ifdef GSM_ENABLE_NOKIA650
+
+static GSM_Reply_Function N650ReplyFunctions[] = {
+ {DCT3DCT4_ReplyGetModelFirmware,"\xD2",0x02,0x00,ID_GetModel },
+ {DCT3DCT4_ReplyGetModelFirmware,"\xD2",0x02,0x00,ID_GetFirmware },
+
+ {NULL, "\x00",0x00,0x00,ID_None }
+};
+
+GSM_Phone_Functions N650Phone = {
+ "0650",
+ N650ReplyFunctions,
+ NONEFUNCTION, /* Initialise */
+ NONEFUNCTION, /* Terminate */
+ GSM_DispatchMessage,
+ NOTSUPPORTED, /* ShowStartInfo */
+ NOKIA_GetManufacturer,
+ DCT3DCT4_GetModel,
+ DCT3DCT4_GetFirmware,
+ NOTSUPPORTED, /* GetIMEI */
+ NOTSUPPORTED, /* GetOriginalIMEI */
+ NOTSUPPORTED, /* GetManufactureMonth */
+ NOTSUPPORTED, /* GetProductCode */
+ NOTSUPPORTED, /* GetHardware */
+ NOTSUPPORTED, /* GetPPM */
+ NOTSUPPORTED, /* GetSIMIMSI */
+ NOTSUPPORTED, /* GetDateTime */
+ NOTSUPPORTED, /* SetDateTime */
+ NOTSUPPORTED, /* GetAlarm */
+ NOTSUPPORTED, /* SetAlarm */
+ NOTSUPPORTED, /* GetLocale */
+ NOTSUPPORTED, /* SetLocale */
+ NOTSUPPORTED, /* PressKey */
+ NOTSUPPORTED, /* Reset */
+ NOTSUPPORTED, /* ResetPhoneSettings */
+ NOTSUPPORTED, /* EnterSecurityCode */
+ NOTSUPPORTED, /* GetSecurityStatus */
+ NOTSUPPORTED, /* GetDisplayStatus */
+ NOTSUPPORTED, /* SetAutoNetworkLogin */
+ NOTSUPPORTED, /* GetBatteryCharge */
+ NOTSUPPORTED, /* GetSignalQuality */
+ NOTSUPPORTED, /* GetNetworkInfo */
+ NOTSUPPORTED, /* GetCategory */
+ NOTSUPPORTED, /* AddCategory */
+ NOTSUPPORTED, /* GetCategoryStatus */
+ NOTSUPPORTED, /* GetMemoryStatus */
+ NOTSUPPORTED, /* GetMemory */
+ NOTSUPPORTED, /* GetNextMemory */
+ NOTSUPPORTED, /* SetMemory */
+ NOTSUPPORTED, /* AddMemory */
+ NOTSUPPORTED, /* DeleteMemory */
+ NOTIMPLEMENTED, /* DeleteAllMemory */
+ NOTSUPPORTED, /* GetSpeedDial */
+ NOTSUPPORTED, /* SetSpeedDial */
+ NOTSUPPORTED, /* GetSMSC */
+ NOTSUPPORTED, /* SetSMSC */
+ NOTSUPPORTED, /* GetSMSStatus */
+ NOTSUPPORTED, /* GetSMS */
+ NOTSUPPORTED, /* GetNextSMS */
+ NOTSUPPORTED, /* SetSMS */
+ NOTSUPPORTED, /* AddSMS */
+ NOTSUPPORTED, /* DeleteSMS */
+ NOTSUPPORTED, /* SendSMSMessage */
+ NOTSUPPORTED, /* SendSavedSMS */
+ NOTSUPPORTED, /* SetIncomingSMS */
+ NOTSUPPORTED, /* SetIncomingCB */
+ NOTSUPPORTED, /* GetSMSFolders */
+ NOTSUPPORTED, /* AddSMSFolder */
+ NOTSUPPORTED, /* DeleteSMSFolder */
+ NOTSUPPORTED, /* DialVoice */
+ NOTSUPPORTED, /* AnswerCall */
+ NOTSUPPORTED, /* CancelCall */
+ NOTSUPPORTED, /* HoldCall */
+ NOTSUPPORTED, /* UnholdCall */
+ NOTSUPPORTED, /* ConferenceCall */
+ NOTSUPPORTED, /* SplitCall */
+ NOTSUPPORTED, /* TransferCall */
+ NOTSUPPORTED, /* SwitchCall */
+ NOTSUPPORTED, /* GetCallDivert */
+ NOTSUPPORTED, /* SetCallDivert */
+ NOTSUPPORTED, /* CancelAllDiverts */
+ NOTSUPPORTED, /* SetIncomingCall */
+ NOTSUPPORTED, /* SetIncomingUSSD */
+ NOTSUPPORTED, /* SendDTMF */
+ NOTSUPPORTED, /* GetRingtone */
+ NOTSUPPORTED, /* SetRingtone */
+ NOTSUPPORTED, /* GetRingtonesInfo */
+ NOTSUPPORTED, /* DeleteUserRingtones */
+ NOTSUPPORTED, /* PlayTone */
+ NOTSUPPORTED, /* GetWAPBookmark */
+ NOTSUPPORTED, /* SetWAPBookmark */
+ NOTSUPPORTED, /* DeleteWAPBookmark */
+ NOTSUPPORTED, /* GetWAPSettings */
+ NOTSUPPORTED, /* SetWAPSettings */
+ NOTSUPPORTED, /* GetMMSSettings */
+ NOTSUPPORTED, /* SetMMSSettings */
+ NOTSUPPORTED, /* GetBitmap */
+ NOTSUPPORTED, /* SetBitmap */
+ NOTSUPPORTED, /* GetToDoStatus */
+ NOTSUPPORTED, /* GetToDo */
+ NOTSUPPORTED, /* GetNextToDo */
+ NOTSUPPORTED, /* SetToDo */
+ NOTSUPPORTED, /* AddToDo */
+ NOTSUPPORTED, /* DeleteToDo */
+ NOTSUPPORTED, /* DeleteAllToDo */
+ NOTSUPPORTED, /* GetCalendarStatus */
+ NOTSUPPORTED, /* GetCalendar */
+ NOTSUPPORTED, /* GetNextCalendar */
+ NOTSUPPORTED, /* SetCalendar */
+ NOTSUPPORTED, /* AddCalendar */
+ NOTSUPPORTED, /* DeleteCalendar */
+ NOTSUPPORTED, /* DeleteAllCalendar */
+ NOTSUPPORTED, /* GetCalendarSettings */
+ NOTSUPPORTED, /* SetCalendarSettings */
+ NOTSUPPORTED, /* GetNoteStatus */
+ NOTSUPPORTED, /* GetNote */
+ NOTSUPPORTED, /* GetNextNote */
+ NOTSUPPORTED, /* SetNote */
+ NOTSUPPORTED, /* AddNote */
+ NOTSUPPORTED, /* DeleteNote */
+ NOTSUPPORTED, /* DeleteAllNotes */
+ NOTSUPPORTED, /* GetProfile */
+ NOTSUPPORTED, /* SetProfile */
+ NOTSUPPORTED, /* GetFMStation */
+ NOTSUPPORTED, /* SetFMStation */
+ NOTSUPPORTED, /* ClearFMStations */
+ NOTSUPPORTED, /* GetNextFileFolder */
+ NOTSUPPORTED, /* GetFilePart */
+ NOTSUPPORTED, /* AddFilePart */
+ NOTSUPPORTED, /* GetFileSystemStatus */
+ NOTSUPPORTED, /* DeleteFile */
+ NOTSUPPORTED, /* AddFolder */
+ NOTSUPPORTED, /* GetGPRSAccessPoint */
+ NOTSUPPORTED /* SetGPRSAccessPoint */
+};
+
+#endif
+
+/* How should editor hadle tabs in this file? Add editor commands here.
+ * vim: noexpandtab sw=8 ts=8 sts=8:
+ */
diff --git a/gammu/emb/common/phone/nokia/dct3/n0650.h b/gammu/emb/common/phone/nokia/dct3/n0650.h
new file mode 100644
index 0000000..be491eb
--- a/dev/null
+++ b/gammu/emb/common/phone/nokia/dct3/n0650.h
@@ -0,0 +1,18 @@
+/* (c) 2004 by Marcin Wiacek */
+
+#ifndef n650_h
+#define n650_h
+
+typedef struct {
+ int fake;
+} GSM_Phone_N650Data;
+
+#ifndef GSM_USED_MBUS2
+# define GSM_USED_MBUS2
+#endif
+
+#endif
+
+/* How should editor hadle tabs in this file? Add editor commands here.
+ * vim: noexpandtab sw=8 ts=8 sts=8:
+ */
diff --git a/gammu/emb/common/phone/nokia/dct3/n6110.c b/gammu/emb/common/phone/nokia/dct3/n6110.c
index dac6c12..c3ddfb6 100644
--- a/gammu/emb/common/phone/nokia/dct3/n6110.c
+++ b/gammu/emb/common/phone/nokia/dct3/n6110.c
@@ -6,2 +6,11 @@
*/
+/* Due to a problem in the source code management, the names of some of
+ * the authors have unfortunately been lost. We do not mean to belittle
+ * their efforts and hope they will contact us to see their names
+ * properly added to the Copyright notice above.
+ * Having published their contributions under the terms of the GNU
+ * General Public License (GPL) [version 2], the Copyright of these
+ * authors will remain respected by adhering to the license they chose
+ * to publish their code under.
+ */
@@ -2870,3 +2879,9 @@ GSM_Phone_Functions N6110Phone = {
NOTSUPPORTED, /* SetCalendarSettings */
- NOTSUPPORTED, /* GetNextNote */
+ NOTSUPPORTED, /* GetNoteStatus */
+ NOTSUPPORTED, /* GetNote */
+ NOTSUPPORTED, /* GetNextNote */
+ NOTSUPPORTED, /* SetNote */
+ NOTSUPPORTED, /* AddNote */
+ NOTSUPPORTED, /* DeleteNote */
+ NOTSUPPORTED, /* DeleteAllNotes */
N6110_GetProfile,
diff --git a/gammu/emb/common/phone/nokia/dct3/n7110.c b/gammu/emb/common/phone/nokia/dct3/n7110.c
index b597f9b..a8e0545 100644
--- a/gammu/emb/common/phone/nokia/dct3/n7110.c
+++ b/gammu/emb/common/phone/nokia/dct3/n7110.c
@@ -5,2 +5,11 @@
*/
+/* Due to a problem in the source code management, the names of some of
+ * the authors have unfortunately been lost. We do not mean to belittle
+ * their efforts and hope they will contact us to see their names
+ * properly added to the Copyright notice above.
+ * Having published their contributions under the terms of the GNU
+ * General Public License (GPL) [version 2], the Copyright of these
+ * authors will remain respected by adhering to the license they chose
+ * to publish their code under.
+ */
@@ -1708,3 +1717,9 @@ GSM_Phone_Functions N7110Phone = {
NOTSUPPORTED, /* SetCalendarSettings */
+ NOTSUPPORTED, /* GetNoteStatus */
+ NOTSUPPORTED, /* GetNote */
NOTSUPPORTED, /* GetNextNote */
+ NOTSUPPORTED, /* SetNote */
+ NOTSUPPORTED, /* AddNote */
+ NOTSUPPORTED, /* DeleteNote */
+ NOTSUPPORTED, /* DeleteAllNotes */
N7110_GetProfile,
diff --git a/gammu/emb/common/phone/nokia/dct3/n9210.c b/gammu/emb/common/phone/nokia/dct3/n9210.c
index ff71ad3..f535c2a 100644
--- a/gammu/emb/common/phone/nokia/dct3/n9210.c
+++ b/gammu/emb/common/phone/nokia/dct3/n9210.c
@@ -376,3 +376,9 @@ GSM_Phone_Functions N9210Phone = {
NOTSUPPORTED, /* SetCalendarSettings */
+ NOTSUPPORTED, /* GetNoteStatus */
+ NOTSUPPORTED, /* GetNote */
NOTSUPPORTED, /* GetNextNote */
+ NOTSUPPORTED, /* SetNote */
+ NOTSUPPORTED, /* AddNote */
+ NOTSUPPORTED, /* DeleteNote */
+ NOTSUPPORTED, /* DeleteAllNotes */
NOTIMPLEMENTED, /* GetProfile */
diff --git a/gammu/emb/common/phone/nokia/dct4/n3320.c b/gammu/emb/common/phone/nokia/dct4/n3320.c
index 9b1d6cd..9dd9ffb 100644
--- a/gammu/emb/common/phone/nokia/dct4/n3320.c
+++ b/gammu/emb/common/phone/nokia/dct4/n3320.c
@@ -251,3 +251,9 @@ GSM_Phone_Functions N3320Phone = {
NOTSUPPORTED, /* SetCalendarSettings */
+ NOTSUPPORTED, /* GetNoteStatus */
+ NOTSUPPORTED, /* GetNote */
NOTSUPPORTED, /* GetNextNote */
+ NOTSUPPORTED, /* SetNote */
+ NOTSUPPORTED, /* AddNote */
+ NOTSUPPORTED, /* DeleteNote */
+ NOTSUPPORTED, /* DeleteAllNotes */
NOTSUPPORTED, /* GetProfile */
diff --git a/gammu/emb/common/phone/nokia/dct4/n3650.c b/gammu/emb/common/phone/nokia/dct4/n3650.c
index d4746a7..f1fa826 100644
--- a/gammu/emb/common/phone/nokia/dct4/n3650.c
+++ b/gammu/emb/common/phone/nokia/dct4/n3650.c
@@ -372,3 +372,9 @@ GSM_Phone_Functions N3650Phone = {
NOTSUPPORTED, /* SetCalendarSettings */
+ NOTSUPPORTED, /* GetNoteStatus */
+ NOTSUPPORTED, /* GetNote */
NOTSUPPORTED, /* GetNextNote */
+ NOTSUPPORTED, /* SetNote */
+ NOTSUPPORTED, /* AddNote */
+ NOTSUPPORTED, /* DeleteNote */
+ NOTSUPPORTED, /* DeleteAllNotes */
NOTSUPPORTED, /* GetProfile */
diff --git a/gammu/emb/common/phone/nokia/dct4/n6510.c b/gammu/emb/common/phone/nokia/dct4/n6510.c
index 2208def..c481863 100644
--- a/gammu/emb/common/phone/nokia/dct4/n6510.c
+++ b/gammu/emb/common/phone/nokia/dct4/n6510.c
@@ -6,2 +6,11 @@
/* function for making CRC for filesystem (c) 2003 by Michael Schroeder */
+/* Due to a problem in the source code management, the names of some of
+ * the authors have unfortunately been lost. We do not mean to belittle
+ * their efforts and hope they will contact us to see their names
+ * properly added to the Copyright notice above.
+ * Having published their contributions under the terms of the GNU
+ * General Public License (GPL) [version 2], the Copyright of these
+ * authors will remain respected by adhering to the license they chose
+ * to publish their code under.
+ */
@@ -288,6 +297,6 @@ static GSM_Error N6510_ReplyGetNetworkInfo(GSM_Protocol_Message msg, GSM_StateMa
- sprintf(NetInfo.LAC, "%02x%02x", msg.Buffer[current+1], msg.Buffer[current+2]);
+ sprintf(NetInfo.LAC, "%02X%02X", msg.Buffer[current+1], msg.Buffer[current+2]);
smprintf(s, "LAC : %s\n", NetInfo.LAC);
- sprintf(NetInfo.CID, "%02x%02x", msg.Buffer[current+5], msg.Buffer[current+6]);
+ sprintf(NetInfo.CID, "%02X%02X", msg.Buffer[current+5], msg.Buffer[current+6]);
smprintf(s, "CID : %s\n", NetInfo.CID);
@@ -313,4 +322,4 @@ static GSM_Error N6510_ReplyGetNetworkInfo(GSM_Protocol_Message msg, GSM_StateMa
NOKIA_GetUnicodeString(s, &tmp, msg.Buffer,Data->NetworkInfo->NetworkName,true);
- sprintf(Data->NetworkInfo->LAC, "%02x%02x", msg.Buffer[current+1], msg.Buffer[current+2]);
- sprintf(Data->NetworkInfo->CID, "%02x%02x", msg.Buffer[current+5], msg.Buffer[current+6]);
+ sprintf(Data->NetworkInfo->LAC, "%02X%02X", msg.Buffer[current+1], msg.Buffer[current+2]);
+ sprintf(Data->NetworkInfo->CID, "%02X%02X", msg.Buffer[current+5], msg.Buffer[current+6]);
NOKIA_DecodeNetworkCode(msg.Buffer + (current+7),Data->NetworkInfo->NetworkCode);
@@ -1129,6 +1138,4 @@ static GSM_Error N6510_SetBitmap(GSM_StateMachine *s, GSM_Bitmap *Bitmap)
int Width, Height, i, count;
-#ifdef DEVELOP
unsigned char folderid;
- int location;
-#endif
+ int location;
GSM_NetworkInfo NetInfo;
@@ -1257,3 +1264,2 @@ static GSM_Error N6510_SetBitmap(GSM_StateMachine *s, GSM_Bitmap *Bitmap)
if (error == ERR_NONE) {
-#ifdef DEVELOP
sms.Folder = 0;
@@ -1267,5 +1273,2 @@ static GSM_Error N6510_SetBitmap(GSM_StateMachine *s, GSM_Bitmap *Bitmap)
reqPicture[7]=location;
-#else
- return ERR_NOTSUPPORTED;
-#endif
}
@@ -2421,2 +2424,5 @@ static GSM_Error N6510_ReplySaveSMSMessage(GSM_Protocol_Message msg, GSM_StateMa
return ERR_INVALIDLOCATION;
+ case 0x03:
+ printf("Memory full (for example no empty space in SIM)\n");
+ return ERR_FULL;
case 0x05:
@@ -2678,2 +2684,4 @@ static GSM_Error N6510_ReplyGetRingtonesInfo(GSM_Protocol_Message msg, GSM_State
Data->RingtonesInfo->Number = msg.Buffer[4] * 256 + msg.Buffer[5];
+ // allocate array of ringtones based on number
+ Data->RingtonesInfo->Ringtone = calloc(Data->RingtonesInfo->Number, sizeof(GSM_RingtoneInfo));
tmp = 6;
@@ -2756,3 +2764,3 @@ static GSM_Error N6510_GetRingtone(GSM_StateMachine *s, GSM_Ringtone *Ringtone,
{
- GSM_AllRingtonesInfo Info;
+ GSM_AllRingtonesInfo Info = {0, NULL};
GSM_Error error;
@@ -2776,3 +2784,5 @@ static GSM_Error N6510_GetRingtone(GSM_StateMachine *s, GSM_Ringtone *Ringtone,
smprintf(s, "Getting binary ringtone\n");
- return GSM_WaitFor (s, req2, 6, 0x1f, 4, ID_GetRingtone);
+ error = GSM_WaitFor (s, req2, 6, 0x1f, 4, ID_GetRingtone);
+ if (Info.Ringtone) free(Info.Ringtone);
+ return error;
case RING_MIDI:
@@ -4056,2 +4066,93 @@ GSM_Error N6510_GetNextNote(GSM_StateMachine *s, GSM_NoteEntry *Note, bool start
+static GSM_Error N6510_DeleteNote(GSM_StateMachine *s, GSM_NoteEntry *Not)
+{
+ GSM_Error error;
+ GSM_NOKIACalToDoLocations *LastNote = &s->Phone.Data.Priv.N6510.LastNote;
+ GSM_CalendarEntry Note;
+
+ if (!IsPhoneFeatureAvailable(s->Phone.Data.ModelInfo, F_NOTES)) return ERR_NOTSUPPORTED;
+
+ error=N6510_GetCalendarInfo3(s,LastNote,2);
+ if (error!=ERR_NONE) return error;
+
+ smprintf(s, "Deleting Note\n");
+
+ if (Not->Location > LastNote->Number || Not->Location == 0) return ERR_INVALIDLOCATION;
+
+ Note.Location = LastNote->Location[Not->Location-1];
+ return N71_65_DelCalendar(s,&Note);
+}
+
+static GSM_Error N6510_ReplyGetNoteFirstLoc(GSM_Protocol_Message msg, GSM_StateMachine *s)
+{
+ smprintf(s, "First Note location: %i\n",msg.Buffer[8]*256+msg.Buffer[9]);
+ s->Phone.Data.Note->Location = msg.Buffer[8]*256+msg.Buffer[9];
+ return ERR_NONE;
+}
+
+static GSM_Error N6510_ReplyAddNote(GSM_Protocol_Message msg, GSM_StateMachine *s)
+{
+ smprintf(s, "ToDo added\n");
+ return ERR_NONE;
+}
+
+static GSM_Error N6510_AddNote(GSM_StateMachine *s, GSM_NoteEntry *Not)
+{
+ GSM_Error error;
+ int count=54;
+ unsigned char reqLoc[] = {N6110_FRAME_HEADER, 0x95,
+ 0x02}; /* 1 = todo, 2 = note */
+ unsigned char req[5000] = {
+ N6110_FRAME_HEADER, 0x65,
+ 0x02, /* 0 = calendar, 1 = todo, 2 = note */
+ 0x00, 0x00, 0x00,
+ 0x00, 0x00, /* location */
+ 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, /* alarm */
+ 0x80, 0x00, 0x00,
+ 0xA9, /* note icon */
+ 0x00, 0x00, 0x00, 0x00, /* alarm type */
+ 0x00, /* 0x02 or 0x00 */
+ 0x80, /* note type */
+ 0x07, 0xD2, 0x01, 0x01, 0x00, 0x00, /* start date/time */
+ 0x07, 0xD2, 0x01, 0x11, 0x00, 0x00, /* end date/time */
+ 0x00, 0x00, /* recurrance */
+ 0xFF, 0xFF, /* birth year */
+ 0x00, /* ToDo priority */
+ 0x00, /* ToDo completed ? */
+ 0x00, 0x00, 0x00,
+ 0x00, /* note text length */
+ 0x00, /* phone length/meeting place */
+ 0x00, 0x00, 0x00};
+
+ s->Phone.Data.Note = Not;
+
+ smprintf(s, "Getting first free Note location\n");
+ error = GSM_WaitFor (s, reqLoc, 5, 0x13, 4, ID_SetNote);
+ if (error!=ERR_NONE) return error;
+ req[8] = Not->Location/256;
+ req[9] = Not->Location%256;
+
+ req[49] = UnicodeLength(Not->Text);
+ CopyUnicodeString(req+54,Not->Text);
+ count+= req[49]*2;
+
+ req[count++] = 0x00;
+
+ smprintf(s, "Adding Note\n");
+ return GSM_WaitFor (s, req, count, 0x13, 4, ID_SetNote);
+}
+
+static GSM_Error N6510_GetNoteStatus(GSM_StateMachine *s, GSM_ToDoStatus *status)
+{
+ GSM_NOKIACalToDoLocations *LastNote = &s->Phone.Data.Priv.N6510.LastNote;
+ GSM_Error error;
+
+ error = N6510_GetCalendarInfo3(s,LastNote,2);
+ if (error!=ERR_NONE) return error;
+
+ status->Used = LastNote->Number;
+ return ERR_NONE;
+}
+
static int N6510_FindFileCheckSum(unsigned char *ptr, int len)
@@ -5191,3 +5292,3 @@ static GSM_Error N6510_ReplyGetToDoFirstLoc2(GSM_Protocol_Message msg, GSM_State
smprintf(s, "First ToDo location method 2: %i\n",msg.Buffer[8]*256+msg.Buffer[9]);
- s->Phone.Data.ToDo->Location = msg.Buffer[9];
+ s->Phone.Data.ToDo->Location = msg.Buffer[8]*256+msg.Buffer[9];
return ERR_NONE;
@@ -5203,3 +5304,4 @@ static GSM_Error N6510_AddToDo2(GSM_StateMachine *s, GSM_ToDoEntry *ToDo)
int Text, Alarm, EndTime, Completed, count=54, Phone;
- unsigned char reqLoc[] = {N6110_FRAME_HEADER, 0x95, 0x01};
+ unsigned char reqLoc[] = {N6110_FRAME_HEADER, 0x95,
+ 0x01}; /* 1 = todo, 2 = note */
unsigned char req[5000] = {
@@ -5587,2 +5689,3 @@ static GSM_Reply_Function N6510ReplyFunctions[] = {
{N6510_ReplyAddToDo2, "\x13",0x03,0x66,ID_SetToDo },
+ {N6510_ReplyAddNote, "\x13",0x03,0x66,ID_SetNote },
{N6510_ReplyGetCalendar3, "\x13",0x03,0x7E,ID_GetCalendarNote },/*method 3*/
@@ -5595,2 +5698,3 @@ static GSM_Reply_Function N6510ReplyFunctions[] = {
{N6510_ReplyGetToDoFirstLoc2, "\x13",0x03,0x96,ID_SetToDo },
+ {N6510_ReplyGetNoteFirstLoc, "\x13",0x03,0x96,ID_SetNote },
{N6510_ReplyGetCalendarInfo, "\x13",0x03,0x9F,ID_GetCalendarNotesInfo},/*method 3*/
@@ -5734,3 +5838,3 @@ static GSM_Reply_Function N6510ReplyFunctions[] = {
GSM_Phone_Functions N6510Phone = {
- "1100|1100a|1100b|3100|3100b|3108|3200|3200a|3300|3510|3510i|3530|3589i|3590|3595|5100|5140|6100|6200|6220|6230|6310|6310i|6385|6510|6610|6610i|6800|6810|6820|7210|7250|7250i|7600|8310|8390|8910|8910i",
+ "1100|1100a|1100b|3100|3100b|3105|3108|3200|3200a|3300|3510|3510i|3530|3589i|3590|3595|5100|5140|6100|6200|6220|6230|6310|6310i|6385|6510|6610|6610i|6800|6810|6820|7210|7250|7250i|7600|8310|8390|8910|8910i",
N6510ReplyFunctions,
@@ -5843,3 +5947,9 @@ GSM_Phone_Functions N6510Phone = {
NOTSUPPORTED, /* SetCalendarSettings */
+ N6510_GetNoteStatus,
+ NOTIMPLEMENTED, /* GetNote */
N6510_GetNextNote,
+ NOTIMPLEMENTED, /* SetNote */
+ N6510_AddNote,
+ N6510_DeleteNote,
+ NOTSUPPORTED, /* DeleteAllNotes */
N6510_GetProfile,
diff --git a/gammu/emb/common/phone/nokia/nauto.c b/gammu/emb/common/phone/nokia/nauto.c
index 3bb53ec..3c7f2cd 100644
--- a/gammu/emb/common/phone/nokia/nauto.c
+++ b/gammu/emb/common/phone/nokia/nauto.c
@@ -123,3 +123,9 @@ GSM_Phone_Functions NAUTOPhone = {
NOTSUPPORTED, /* SetCalendarSettings */
+ NOTSUPPORTED, /* GetNoteStatus */
+ NOTSUPPORTED, /* GetNote */
NOTSUPPORTED, /* GetNextNote */
+ NOTSUPPORTED, /* SetNote */
+ NOTSUPPORTED, /* AddNote */
+ NOTSUPPORTED, /* DeleteNote */
+ NOTSUPPORTED, /* DeleteAllNotes */
NOTSUPPORTED, /* GetProfile */
diff --git a/gammu/emb/common/phone/obex/obexgen.c b/gammu/emb/common/phone/obex/obexgen.c
index 3106369..b91afac 100644
--- a/gammu/emb/common/phone/obex/obexgen.c
+++ b/gammu/emb/common/phone/obex/obexgen.c
@@ -831,3 +831,9 @@ GSM_Phone_Functions OBEXGENPhone = {
NOTSUPPORTED, /* SetCalendarSettings */
+ NOTSUPPORTED, /* GetNoteStatus */
+ NOTSUPPORTED, /* GetNote */
NOTSUPPORTED, /* GetNextNote */
+ NOTSUPPORTED, /* SetNote */
+ NOTSUPPORTED, /* AddNote */
+ NOTSUPPORTED, /* DeleteNote */
+ NOTSUPPORTED, /* DeleteAllNotes */
NOTIMPLEMENTED, /* GetProfile */
diff --git a/gammu/emb/common/phone/pfunc.c b/gammu/emb/common/phone/pfunc.c
index a03a81d..fe890fc 100644
--- a/gammu/emb/common/phone/pfunc.c
+++ b/gammu/emb/common/phone/pfunc.c
@@ -63,2 +63,3 @@ GSM_Error PHONE_EncodeSMSFrame(GSM_StateMachine *s, GSM_SMSMessage *SMS, unsigne
if (SMS->SMSC.Number[0] == 0x00 && SMS->SMSC.Number[1] == 0x00) {
+ smprintf(s,"No SMSC in SMS Deliver\n");
return ERR_EMPTYSMSC;
diff --git a/gammu/emb/common/phone/symbian/mroutgen.c b/gammu/emb/common/phone/symbian/mroutgen.c
index a7382cf..63d26cf 100644
--- a/gammu/emb/common/phone/symbian/mroutgen.c
+++ b/gammu/emb/common/phone/symbian/mroutgen.c
@@ -200,3 +200,9 @@ GSM_Phone_Functions MROUTERGENPhone = {
NOTSUPPORTED, /* SetCalendarSettings */
+ NOTSUPPORTED, /* GetNoteStatus */
+ NOTSUPPORTED, /* GetNote */
NOTSUPPORTED, /* GetNextNote */
+ NOTSUPPORTED, /* SetNote */
+ NOTSUPPORTED, /* AddNote */
+ NOTSUPPORTED, /* DeleteNote */
+ NOTSUPPORTED, /* DeleteAllNotes */
NOTSUPPORTED, /* GetProfile */
diff --git a/gammu/emb/common/protocol/nokia/fbus2.c b/gammu/emb/common/protocol/nokia/fbus2.c
index 2b41f8b..967eaa4 100644
--- a/gammu/emb/common/protocol/nokia/fbus2.c
+++ b/gammu/emb/common/protocol/nokia/fbus2.c
@@ -6,2 +6,11 @@
*/
+/* Due to a problem in the source code management, the names of some of
+ * the authors have unfortunately been lost. We do not mean to belittle
+ * their efforts and hope they will contact us to see their names
+ * properly added to the Copyright notice above.
+ * Having published their contributions under the terms of the GNU
+ * General Public License (GPL) [version 2], the Copyright of these
+ * authors will remain respected by adhering to the license they chose
+ * to publish their code under.
+ */
@@ -147,2 +156,3 @@ static GSM_Error FBUS2_StateMachine(GSM_StateMachine *s, unsigned char rx_char)
}
+ free(d->Msg.Buffer);
diff --git a/gammu/emb/common/protocol/nokia/fbus2.h b/gammu/emb/common/protocol/nokia/fbus2.h
index 8dbcb07..3d31006 100644
--- a/gammu/emb/common/protocol/nokia/fbus2.h
+++ b/gammu/emb/common/protocol/nokia/fbus2.h
@@ -6,2 +6,11 @@
*/
+/* Due to a problem in the source code management, the names of some of
+ * the authors have unfortunately been lost. We do not mean to belittle
+ * their efforts and hope they will contact us to see their names
+ * properly added to the Copyright notice above.
+ * Having published their contributions under the terms of the GNU
+ * General Public License (GPL) [version 2], the Copyright of these
+ * authors will remain respected by adhering to the license they chose
+ * to publish their code under.
+ */
diff --git a/gammu/emb/common/protocol/nokia/phonet.c b/gammu/emb/common/protocol/nokia/phonet.c
index db5bd72..495a1bf 100644
--- a/gammu/emb/common/protocol/nokia/phonet.c
+++ b/gammu/emb/common/protocol/nokia/phonet.c
@@ -5,2 +5,11 @@
*/
+/* Due to a problem in the source code management, the names of some of
+ * the authors have unfortunately been lost. We do not mean to belittle
+ * their efforts and hope they will contact us to see their names
+ * properly added to the Copyright notice above.
+ * Having published their contributions under the terms of the GNU
+ * General Public License (GPL) [version 2], the Copyright of these
+ * authors will remain respected by adhering to the license they chose
+ * to publish their code under.
+ */
diff --git a/gammu/emb/common/protocol/nokia/phonet.h b/gammu/emb/common/protocol/nokia/phonet.h
index e750bbd..7626c23 100644
--- a/gammu/emb/common/protocol/nokia/phonet.h
+++ b/gammu/emb/common/protocol/nokia/phonet.h
@@ -5,2 +5,11 @@
*/
+/* Due to a problem in the source code management, the names of some of
+ * the authors have unfortunately been lost. We do not mean to belittle
+ * their efforts and hope they will contact us to see their names
+ * properly added to the Copyright notice above.
+ * Having published their contributions under the terms of the GNU
+ * General Public License (GPL) [version 2], the Copyright of these
+ * authors will remain respected by adhering to the license they chose
+ * to publish their code under.
+ */
diff --git a/gammu/emb/common/service/backup/backgen.h b/gammu/emb/common/service/backup/backgen.h
index 9a930fc..9d97954 100644
--- a/gammu/emb/common/service/backup/backgen.h
+++ b/gammu/emb/common/service/backup/backgen.h
@@ -66,3 +66,3 @@ typedef struct {
extern GSM_Error GSM_ReadSMSBackupFile(char *FileName, GSM_SMS_Backup *backup);
-extern GSM_Error GSM_SaveSMSBackupFile(char *FileName, GSM_SMS_Backup *backup);
+extern GSM_Error GSM_AddSMSBackupFile (char *FileName, GSM_SMS_Backup *backup);
diff --git a/gammu/emb/common/service/backup/backtext.c b/gammu/emb/common/service/backup/backtext.c
index 4cb1bb7..07a3b22 100644
--- a/gammu/emb/common/service/backup/backtext.c
+++ b/gammu/emb/common/service/backup/backtext.c
@@ -2998,3 +2998,3 @@ GSM_Error GSM_ReadSMSBackupFile(char *FileName, GSM_SMS_Backup *backup)
-GSM_Error SaveSMSBackupTextFile(FILE *file, GSM_SMS_Backup *backup)
+static GSM_Error SaveSMSBackupTextFile(FILE *file, GSM_SMS_Backup *backup)
{
@@ -3006,3 +3006,7 @@ GSM_Error SaveSMSBackupTextFile(FILE *file, GSM_SMS_Backup *backup)
GSM_GetCurrentDateTime (&DT);
- fprintf(file,"# Saved %s\n\n",OSDateTime(DT,false));
+ fprintf(file,"# Saved ");
+ fprintf(file, "%04d%02d%02dT%02d%02d%02d",
+ DT.Year, DT.Month, DT.Day,
+ DT.Hour, DT.Minute, DT.Second);
+ fprintf(file," (%s)\n\n",OSDateTime(DT,false));
@@ -3090,3 +3094,3 @@ GSM_Error SaveSMSBackupTextFile(FILE *file, GSM_SMS_Backup *backup)
-GSM_Error GSM_SaveSMSBackupFile(char *FileName, GSM_SMS_Backup *backup)
+GSM_Error GSM_AddSMSBackupFile(char *FileName, GSM_SMS_Backup *backup)
{
@@ -3094,3 +3098,3 @@ GSM_Error GSM_SaveSMSBackupFile(char *FileName, GSM_SMS_Backup *backup)
- file = fopen(FileName, "wb");
+ file = fopen(FileName, "ab");
if (file == NULL) return(ERR_CANTOPENFILE);
diff --git a/gammu/emb/common/service/gsmring.h b/gammu/emb/common/service/gsmring.h
index 2d2dd7a..33e5424 100644
--- a/gammu/emb/common/service/gsmring.h
+++ b/gammu/emb/common/service/gsmring.h
@@ -173,3 +173,3 @@ typedef struct {
int Number;
- GSM_RingtoneInfo Ringtone[100];
+ GSM_RingtoneInfo *Ringtone;
} GSM_AllRingtonesInfo;
diff --git a/gammu/emb/gammu/gammu.c b/gammu/emb/gammu/gammu.c
index 684e67c..4c6486d 100644
--- a/gammu/emb/gammu/gammu.c
+++ b/gammu/emb/gammu/gammu.c
@@ -437,3 +437,3 @@ static void SetAlarm(int argc, char *argv[])
GSM_Bitmap caller[5];
-GSM_AllRingtonesInfo Info;
+GSM_AllRingtonesInfo Info = {0, NULL};
bool callerinit[5] = {false, false, false, false, false};
@@ -566,2 +566,3 @@ static void GetAllMemory(int argc, char *argv[])
if (error == ERR_EMPTY) break;
+ if (error != ERR_NONE && Info.Ringtone) free(Info.Ringtone);
Print_Error(error);
@@ -572,2 +573,4 @@ static void GetAllMemory(int argc, char *argv[])
+ if (Info.Ringtone) free(Info.Ringtone);
+
GSM_Terminate();
@@ -619,3 +622,6 @@ static void GetMemory(int argc, char *argv[])
error=Phone->GetMemory(&s, &entry);
- if (error != ERR_EMPTY) Print_Error(error);
+ if (error != ERR_EMPTY) {
+ if (Info.Ringtone) free(Info.Ringtone);
+ Print_Error(error);
+ }
@@ -635,2 +641,4 @@ static void GetMemory(int argc, char *argv[])
printmsg("%i entries empty, %i entries filled\n",emptynum,fillednum);
+
+ if (Info.Ringtone) free(Info.Ringtone);
@@ -1625,3 +1633,3 @@ static void GetRingtonesList(int argc, char *argv[])
{
- GSM_AllRingtonesInfo Info;
+ GSM_AllRingtonesInfo Info = {0, NULL};
int i;
@@ -1631,2 +1639,3 @@ static void GetRingtonesList(int argc, char *argv[])
error=Phone->GetRingtonesInfo(&s,&Info);
+ if (error != ERR_NONE && Info.Ringtone) free(Info.Ringtone);
Print_Error(error);
@@ -1636,2 +1645,4 @@ static void GetRingtonesList(int argc, char *argv[])
for (i=0;i<Info.Number;i++) printmsg("%i. \"%s\"\n",i,DecodeUnicodeConsole(Info.Ringtone[i].Name));
+
+ if (Info.Ringtone) free(Info.Ringtone);
}
@@ -2179,3 +2190,3 @@ static void GetBitmap(int argc, char *argv[])
int location=0;
- GSM_AllRingtonesInfo Info;
+ GSM_AllRingtonesInfo Info = {0, NULL};
@@ -2250,2 +2261,4 @@ static void GetBitmap(int argc, char *argv[])
}
+
+ if (Info.Ringtone) free(Info.Ringtone);
}
@@ -4647,2 +4660,3 @@ static void Restore(int argc, char *argv[])
GSM_ToDoStatus ToDoStatus;
+ GSM_NoteEntry Note;
GSM_Profile Profile;
@@ -4916,2 +4930,38 @@ static void Restore(int argc, char *argv[])
+ DoRestore = false;
+ if (Backup.ToDo[0] != NULL) {
+ error = Phone->GetNotesStatus(&s,&ToDoStatus);
+ if (error == ERR_NONE) {
+ max = 0;
+ while (Backup.Note[max]!=NULL) max++;
+ printmsgerr("%i entries in backup file\n",max);
+
+ if (answer_yes("Restore Notes")) DoRestore = true;
+ }
+ }
+ if (DoRestore) {
+ printmsgerr("Deleting old Notes: ");
+ while (1) {
+ error = Phone->GetNextNote(&s,&Note,true);
+ if (error != ERR_NONE) break;
+ error = Phone->DeleteNote(&s,&Note);
+ Print_Error(error);
+ printmsgerr("*");
+ }
+ printmsgerr("\n");
+
+ for (i=0;i<max;i++) {
+ Note = *Backup.Note[i];
+ Note.Location = 0;
+ error=Phone->AddNote(&s,&Note);
+ Print_Error(error);
+ printmsgerr("%cWriting: %i percent",13,(i+1)*100/max);
+ if (gshutdown) {
+ GSM_Terminate();
+ exit(0);
+ }
+ }
+ printmsgerr("\n");
+ }
+
if (Backup.SMSC[0] != NULL && answer_yes("Restore SMSC profiles")) {
@@ -5289,2 +5339,3 @@ static void ClearAll(int argc, char *argv[])
GSM_ToDoEntry ToDo;
+ GSM_NoteEntry Note;
GSM_WAPBookmark Bookmark;
@@ -5398,2 +5449,19 @@ static void ClearAll(int argc, char *argv[])
+ DoClear = false;
+ error = Phone->GetNotesStatus(&s,&ToDoStatus);
+ if (error == ERR_NONE && ToDoStatus.Used != 0) {
+ if (answer_yes("Delete Notes")) DoClear = true;
+ }
+ if (DoClear) {
+ printmsgerr("Deleting: ");
+ while (1) {
+ error = Phone->GetNextNote(&s,&Note,true);
+ if (error != ERR_NONE) break;
+ error = Phone->DeleteNote(&s,&Note);
+ Print_Error(error);
+ printmsgerr("*");
+ }
+ printmsgerr("\n");
+ }
+
Bookmark.Location = 1;
@@ -5644,14 +5712,7 @@ static void BackupSMS(int argc, char *argv[])
bool BackupFromFolder[GSM_MAX_SMS_FOLDERS];
- bool start = true;
+ bool start = true;
bool DeleteAfter;
- int j, smsnum;
+ int j, smsnum = 0;
char buffer[200];
- /* We ignore return code, because (when file doesn't exist) we
- * will create new later
- */
- GSM_ReadSMSBackupFile(argv[2], &Backup);
- smsnum = 0;
- while (Backup.SMS[smsnum]!=NULL) smsnum++;
-
GSM_Init(true);
@@ -5666,2 +5727,3 @@ static void BackupSMS(int argc, char *argv[])
sprintf(buffer,"Backup sms from folder \"%s\"",DecodeUnicodeConsole(folders.Folder[j].Name));
+ if (folders.Folder[j].Memory == MEM_SM) strcat(buffer," (SIM)");
if (answer_yes(buffer)) BackupFromFolder[j] = true;
@@ -5704,3 +5766,3 @@ static void BackupSMS(int argc, char *argv[])
- error = GSM_SaveSMSBackupFile(argv[2],&Backup);
+ error = GSM_AddSMSBackupFile(argv[2],&Backup);
Print_Error(error);
@@ -5756,2 +5818,3 @@ static void RestoreSMS(int argc, char *argv[])
char buffer[200];
+ bool restore8bit,doit;
@@ -5760,2 +5823,5 @@ static void RestoreSMS(int argc, char *argv[])
+ sprintf(buffer,"Do you want to restore binary SMS");
+ restore8bit = answer_yes(buffer);
+
GSM_Init(true);
@@ -5766,9 +5832,15 @@ static void RestoreSMS(int argc, char *argv[])
while (Backup.SMS[smsnum] != NULL) {
- SMS.Number = 1;
- memcpy(&SMS.SMS[0],Backup.SMS[smsnum],sizeof(GSM_SMSMessage));
- displaymultismsinfo(SMS,false,false);
- sprintf(buffer,"Restore sms to folder \"%s\"",DecodeUnicodeConsole(folders.Folder[Backup.SMS[smsnum]->Folder-1].Name));
- if (answer_yes(buffer)) {
- error=Phone->AddSMS(&s, Backup.SMS[smsnum]);
- Print_Error(error);
+ doit = true;
+ if (!restore8bit && Backup.SMS[smsnum]->Coding == SMS_Coding_8bit) doit = false;
+ if (doit) {
+ SMS.Number = 1;
+ memcpy(&SMS.SMS[0],Backup.SMS[smsnum],sizeof(GSM_SMSMessage));
+ displaymultismsinfo(SMS,false,false);
+ sprintf(buffer,"Restore %03i sms to folder \"%s\"",smsnum+1,DecodeUnicodeConsole(folders.Folder[Backup.SMS[smsnum]->Folder-1].Name));
+ if (folders.Folder[Backup.SMS[smsnum]->Folder-1].Memory == MEM_SM) strcat(buffer," (SIM)");
+ if (answer_yes(buffer)) {
+ smprintf(&s,"saving %i SMS\n",smsnum);
+ error=Phone->AddSMS(&s, Backup.SMS[smsnum]);
+ Print_Error(error);
+ }
}
@@ -6362,3 +6434,3 @@ static void GetProfile(int argc, char *argv[])
bool callerinit[5],special;
- GSM_AllRingtonesInfo Info;
+ GSM_AllRingtonesInfo Info = {0, NULL};
@@ -6376,2 +6448,3 @@ static void GetProfile(int argc, char *argv[])
error=Phone->GetProfile(&s,&Profile);
+ if (error != ERR_NONE && Info.Ringtone) free(Info.Ringtone);
Print_Error(error);
@@ -6489,2 +6562,4 @@ static void GetProfile(int argc, char *argv[])
GSM_Terminate();
+
+ if (Info.Ringtone) free(Info.Ringtone);
}
@@ -7981,3 +8056,3 @@ static GSM_Parameters Parameters[] = {
{"--playringtone", 1, 1, PlayRingtone, {H_Ringtone,0}, "file"},
- {"--playsavedringtone", 1, 1, DCT4PlaySavedRingtone, {H_Ringtone,0}, ""},
+ {"--playsavedringtone", 1, 1, DCT4PlaySavedRingtone, {H_Ringtone,0}, "number"},
{"--getdatetime", 0, 0, GetDateTime, {H_DateTime,0}, ""},
diff --git a/gammu/emb/gammu/smsd/s_files.c b/gammu/emb/gammu/smsd/s_files.c
index b791e58..e1c626f 100644
--- a/gammu/emb/gammu/smsd/s_files.c
+++ b/gammu/emb/gammu/smsd/s_files.c
@@ -68,3 +68,3 @@ static GSM_Error SMSDFiles_SaveInboxSMS(GSM_MultiSMSMessage sms, GSM_SMSDConfig
backup.SMS[sms.Number] = NULL;
- error = GSM_SaveSMSBackupFile(FullName, &backup);
+ error = GSM_AddSMSBackupFile(FullName, &backup);
done = true;
diff --git a/gammu/emb/gammu/smsd/smsdcore.c b/gammu/emb/gammu/smsd/smsdcore.c
index cc9accc..e69a6e7 100644
--- a/gammu/emb/gammu/smsd/smsdcore.c
+++ b/gammu/emb/gammu/smsd/smsdcore.c
@@ -112,7 +112,7 @@ void SMSD_ReadConfig(char *filename, GSM_SMSDConfig *Config, bool log, char *ser
if (Config->PINCode == NULL) {
- if (log) WriteSMSDLog("No PIN code in %s file",filename);
- fprintf(stderr,"No PIN code in %s file\n",filename);
- exit(-1);
+ if (log) WriteSMSDLog("Warning: No PIN code in %s file",filename);
+ fprintf(stderr,"Warning: No PIN code in %s file\n",filename);
+ } else {
+ if (log) WriteSMSDLog("PIN code is \"%s\"",Config->PINCode);
}
- if (log) WriteSMSDLog("PIN code is \"%s\"",Config->PINCode);
@@ -219,12 +219,17 @@ bool SMSD_CheckSecurity(GSM_SMSDConfig *Config)
case SEC_Pin:
- WriteSMSDLog("Trying to enter PIN");
- strcpy(SecurityCode.Code,Config->PINCode);
- error=Phone->EnterSecurityCode(&s,SecurityCode);
- if (error == ERR_SECURITYERROR) {
- GSM_Terminate_SMSD("ERROR: incorrect PIN", error, true, -1);
- }
- if (error != ERR_NONE) {
- WriteSMSDLog("Error entering PIN (%i)", error);
+ if (Config->PINCode==NULL) {
+ WriteSMSDLog("Warning: no PIN in config");
return false;
- }
+ } else {
+ WriteSMSDLog("Trying to enter PIN");
+ strcpy(SecurityCode.Code,Config->PINCode);
+ error=Phone->EnterSecurityCode(&s,SecurityCode);
+ if (error == ERR_SECURITYERROR) {
+ GSM_Terminate_SMSD("ERROR: incorrect PIN", error, true, -1);
+ }
+ if (error != ERR_NONE) {
+ WriteSMSDLog("Error entering PIN (%i)", error);
+ return false;
+ }
+ }
break;