-rw-r--r-- | gammu/emb/common/protocol/nokia/fbus2.c | 10 | ||||
-rw-r--r-- | gammu/emb/common/protocol/nokia/fbus2.h | 9 | ||||
-rw-r--r-- | gammu/emb/common/protocol/nokia/phonet.c | 9 | ||||
-rw-r--r-- | gammu/emb/common/protocol/nokia/phonet.h | 9 |
4 files changed, 37 insertions, 0 deletions
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 | |||
@@ -1,54 +1,63 @@ | |||
1 | /* (c) 2002-2003 by Marcin Wiacek */ | 1 | /* (c) 2002-2003 by Marcin Wiacek */ |
2 | /* based on some work from MyGnokii (www.mwiacek.com) */ | 2 | /* based on some work from MyGnokii (www.mwiacek.com) */ |
3 | /* Based on some work from Gnokii (www.gnokii.org) | 3 | /* Based on some work from Gnokii (www.gnokii.org) |
4 | * (C) 1999-2000 Hugh Blemings & Pavel Janik ml. (C) 2001-2004 Pawel Kot | 4 | * (C) 1999-2000 Hugh Blemings & Pavel Janik ml. (C) 2001-2004 Pawel Kot |
5 | * GNU GPL version 2 or later | 5 | * GNU GPL version 2 or later |
6 | */ | 6 | */ |
7 | /* Due to a problem in the source code management, the names of some of | ||
8 | * the authors have unfortunately been lost. We do not mean to belittle | ||
9 | * their efforts and hope they will contact us to see their names | ||
10 | * properly added to the Copyright notice above. | ||
11 | * Having published their contributions under the terms of the GNU | ||
12 | * General Public License (GPL) [version 2], the Copyright of these | ||
13 | * authors will remain respected by adhering to the license they chose | ||
14 | * to publish their code under. | ||
15 | */ | ||
7 | 16 | ||
8 | #include "../../gsmstate.h" | 17 | #include "../../gsmstate.h" |
9 | 18 | ||
10 | #if defined(GSM_ENABLE_FBUS2) || defined(GSM_ENABLE_FBUS2IRDA) || defined(GSM_ENABLE_FBUS2DLR3) || defined(GSM_ENABLE_FBUS2BLUE) || defined(GSM_ENABLE_BLUEFBUS2) || defined(GSM_ENABLE_FBUS2DKU5) || defined(GSM_ENABLE_FBUS2PL2303) | 19 | #if defined(GSM_ENABLE_FBUS2) || defined(GSM_ENABLE_FBUS2IRDA) || defined(GSM_ENABLE_FBUS2DLR3) || defined(GSM_ENABLE_FBUS2BLUE) || defined(GSM_ENABLE_BLUEFBUS2) || defined(GSM_ENABLE_FBUS2DKU5) || defined(GSM_ENABLE_FBUS2PL2303) |
11 | 20 | ||
12 | #include <stdio.h> | 21 | #include <stdio.h> |
13 | #include <string.h> | 22 | #include <string.h> |
14 | 23 | ||
15 | #include "../../gsmcomon.h" | 24 | #include "../../gsmcomon.h" |
16 | #include "fbus2.h" | 25 | #include "fbus2.h" |
17 | 26 | ||
18 | static GSM_Error FBUS2_WriteFrame(GSM_StateMachine *s, | 27 | static GSM_Error FBUS2_WriteFrame(GSM_StateMachine *s, |
19 | unsigned char *MsgBuffer, | 28 | unsigned char *MsgBuffer, |
20 | int MsgLength, | 29 | int MsgLength, |
21 | unsigned char MsgType) | 30 | unsigned char MsgType) |
22 | { | 31 | { |
23 | unsigned char buffer2[FBUS2_MAX_TRANSMIT_LENGTH + 10]; | 32 | unsigned char buffer2[FBUS2_MAX_TRANSMIT_LENGTH + 10]; |
24 | unsigned char checksum=0; | 33 | unsigned char checksum=0; |
25 | int i, len, sent; | 34 | int i, len, sent; |
26 | 35 | ||
27 | buffer2[0] = FBUS2_FRAME_ID; | 36 | buffer2[0] = FBUS2_FRAME_ID; |
28 | if (s->ConnectionType==GCT_FBUS2IRDA) buffer2[0] = FBUS2_IRDA_FRAME_ID; | 37 | if (s->ConnectionType==GCT_FBUS2IRDA) buffer2[0] = FBUS2_IRDA_FRAME_ID; |
29 | 38 | ||
30 | buffer2[1] = FBUS2_DEVICE_PHONE; //destination | 39 | buffer2[1] = FBUS2_DEVICE_PHONE; //destination |
31 | buffer2[2] = FBUS2_DEVICE_PC; //source | 40 | buffer2[2] = FBUS2_DEVICE_PC; //source |
32 | buffer2[3]= MsgType; | 41 | buffer2[3]= MsgType; |
33 | buffer2[4]= MsgLength / 256; | 42 | buffer2[4]= MsgLength / 256; |
34 | buffer2[5]= MsgLength % 256; | 43 | buffer2[5]= MsgLength % 256; |
35 | 44 | ||
36 | memcpy(buffer2 + 6, MsgBuffer, MsgLength); | 45 | memcpy(buffer2 + 6, MsgBuffer, MsgLength); |
37 | len = MsgLength + 6; | 46 | len = MsgLength + 6; |
38 | 47 | ||
39 | /* Odd messages require additional 0x00 byte */ | 48 | /* Odd messages require additional 0x00 byte */ |
40 | if (MsgLength % 2) buffer2[len++] = 0x00; | 49 | if (MsgLength % 2) buffer2[len++] = 0x00; |
41 | 50 | ||
42 | checksum = 0; | 51 | checksum = 0; |
43 | for (i = 0; i < len; i+=2) checksum ^= buffer2[i]; | 52 | for (i = 0; i < len; i+=2) checksum ^= buffer2[i]; |
44 | buffer2[len++] = checksum; | 53 | buffer2[len++] = checksum; |
45 | 54 | ||
46 | checksum = 0; | 55 | checksum = 0; |
47 | for (i = 1; i < len; i+=2) checksum ^= buffer2[i]; | 56 | for (i = 1; i < len; i+=2) checksum ^= buffer2[i]; |
48 | buffer2[len++] = checksum; | 57 | buffer2[len++] = checksum; |
49 | 58 | ||
50 | /* Sending to phone */ | 59 | /* Sending to phone */ |
51 | sent=s->Device.Functions->WriteDevice(s,buffer2,len); | 60 | sent=s->Device.Functions->WriteDevice(s,buffer2,len); |
52 | if (sent!=len) return ERR_DEVICEWRITEERROR; | 61 | if (sent!=len) return ERR_DEVICEWRITEERROR; |
53 | 62 | ||
54 | return ERR_NONE; | 63 | return ERR_NONE; |
@@ -100,96 +109,97 @@ static GSM_Error FBUS2_SendAck(GSM_StateMachine *s, | |||
100 | buffer2[1] = MsgSequence; | 109 | buffer2[1] = MsgSequence; |
101 | 110 | ||
102 | if (s->di.dl==DL_TEXT || s->di.dl==DL_TEXTALL || | 111 | if (s->di.dl==DL_TEXT || s->di.dl==DL_TEXTALL || |
103 | s->di.dl==DL_TEXTDATE || s->di.dl==DL_TEXTALLDATE) { | 112 | s->di.dl==DL_TEXTDATE || s->di.dl==DL_TEXTALLDATE) { |
104 | smprintf(s,"[Sending Ack of type %02x, seq %x]\n",buffer2[0],buffer2[1]); | 113 | smprintf(s,"[Sending Ack of type %02x, seq %x]\n",buffer2[0],buffer2[1]); |
105 | } | 114 | } |
106 | 115 | ||
107 | /* Sending to phone */ | 116 | /* Sending to phone */ |
108 | return FBUS2_WriteFrame(s, buffer2, 2, FBUS2_ACK_BYTE); | 117 | return FBUS2_WriteFrame(s, buffer2, 2, FBUS2_ACK_BYTE); |
109 | } | 118 | } |
110 | 119 | ||
111 | static GSM_Error FBUS2_StateMachine(GSM_StateMachine *s, unsigned char rx_char) | 120 | static GSM_Error FBUS2_StateMachine(GSM_StateMachine *s, unsigned char rx_char) |
112 | { | 121 | { |
113 | GSM_Protocol_FBUS2Data *d = &s->Protocol.Data.FBUS2; | 122 | GSM_Protocol_FBUS2Data *d = &s->Protocol.Data.FBUS2; |
114 | unsigned char frm_num, seq_num; | 123 | unsigned char frm_num, seq_num; |
115 | bool correct = false; | 124 | bool correct = false; |
116 | 125 | ||
117 | /* XOR the byte with the earlier checksum */ | 126 | /* XOR the byte with the earlier checksum */ |
118 | d->Msg.CheckSum[d->Msg.Count & 1] ^= rx_char; | 127 | d->Msg.CheckSum[d->Msg.Count & 1] ^= rx_char; |
119 | 128 | ||
120 | if (d->MsgRXState == RX_GetMessage) { | 129 | if (d->MsgRXState == RX_GetMessage) { |
121 | d->Msg.Buffer[d->Msg.Count] = rx_char; | 130 | d->Msg.Buffer[d->Msg.Count] = rx_char; |
122 | d->Msg.Count++; | 131 | d->Msg.Count++; |
123 | 132 | ||
124 | /* This is not last byte in frame */ | 133 | /* This is not last byte in frame */ |
125 | if (d->Msg.Count != d->Msg.Length+(d->Msg.Length%2)+2) return ERR_NONE; | 134 | if (d->Msg.Count != d->Msg.Length+(d->Msg.Length%2)+2) return ERR_NONE; |
126 | 135 | ||
127 | /* Checksum is incorrect */ | 136 | /* Checksum is incorrect */ |
128 | if (d->Msg.CheckSum[0] != d->Msg.CheckSum[1]) { | 137 | if (d->Msg.CheckSum[0] != d->Msg.CheckSum[1]) { |
129 | if (s->di.dl==DL_TEXT || s->di.dl==DL_TEXTALL || s->di.dl==DL_TEXTERROR || | 138 | if (s->di.dl==DL_TEXT || s->di.dl==DL_TEXTALL || s->di.dl==DL_TEXTERROR || |
130 | s->di.dl==DL_TEXTDATE || s->di.dl==DL_TEXTALLDATE || s->di.dl==DL_TEXTERRORDATE) { | 139 | s->di.dl==DL_TEXTDATE || s->di.dl==DL_TEXTALLDATE || s->di.dl==DL_TEXTERRORDATE) { |
131 | smprintf(s,"[ERROR: checksum]\n"); | 140 | smprintf(s,"[ERROR: checksum]\n"); |
132 | } | 141 | } |
133 | free(d->Msg.Buffer); | 142 | free(d->Msg.Buffer); |
134 | d->Msg.Length = 0; | 143 | d->Msg.Length = 0; |
135 | d->Msg.Buffer = NULL; | 144 | d->Msg.Buffer = NULL; |
136 | 145 | ||
137 | d->MsgRXState = RX_Sync; | 146 | d->MsgRXState = RX_Sync; |
138 | return ERR_NONE; | 147 | return ERR_NONE; |
139 | } | 148 | } |
140 | 149 | ||
141 | seq_num = d->Msg.Buffer[d->Msg.Length-1]; | 150 | seq_num = d->Msg.Buffer[d->Msg.Length-1]; |
142 | 151 | ||
143 | if (d->Msg.Type == FBUS2_ACK_BYTE) { | 152 | if (d->Msg.Type == FBUS2_ACK_BYTE) { |
144 | if (s->di.dl==DL_TEXT || s->di.dl==DL_TEXTALL || | 153 | if (s->di.dl==DL_TEXT || s->di.dl==DL_TEXTALL || |
145 | s->di.dl==DL_TEXTDATE || s->di.dl==DL_TEXTALLDATE) { | 154 | s->di.dl==DL_TEXTDATE || s->di.dl==DL_TEXTALLDATE) { |
146 | smprintf(s, "[Received Ack of type %02x, seq %02x]\n",d->Msg.Buffer[0],seq_num); | 155 | smprintf(s, "[Received Ack of type %02x, seq %02x]\n",d->Msg.Buffer[0],seq_num); |
147 | } | 156 | } |
157 | free(d->Msg.Buffer); | ||
148 | 158 | ||
149 | d->MsgRXState = RX_Sync; | 159 | d->MsgRXState = RX_Sync; |
150 | return ERR_NONE; | 160 | return ERR_NONE; |
151 | } | 161 | } |
152 | 162 | ||
153 | frm_num = d->Msg.Buffer[d->Msg.Length-2]; | 163 | frm_num = d->Msg.Buffer[d->Msg.Length-2]; |
154 | 164 | ||
155 | if ((seq_num & 0x40) == 0x40) { | 165 | if ((seq_num & 0x40) == 0x40) { |
156 | d->FramesToGo = frm_num; | 166 | d->FramesToGo = frm_num; |
157 | d->MultiMsg.Length= 0; | 167 | d->MultiMsg.Length= 0; |
158 | d->MultiMsg.Type= d->Msg.Type; | 168 | d->MultiMsg.Type= d->Msg.Type; |
159 | d->MultiMsg.Destination= d->Msg.Destination; | 169 | d->MultiMsg.Destination= d->Msg.Destination; |
160 | d->MultiMsg.Source= d->Msg.Source; | 170 | d->MultiMsg.Source= d->Msg.Source; |
161 | } | 171 | } |
162 | 172 | ||
163 | if ((seq_num & 0x40) != 0x40 && d->FramesToGo != frm_num) { | 173 | if ((seq_num & 0x40) != 0x40 && d->FramesToGo != frm_num) { |
164 | if (s->di.dl==DL_TEXT || s->di.dl==DL_TEXTALL || s->di.dl==DL_TEXTERROR || | 174 | if (s->di.dl==DL_TEXT || s->di.dl==DL_TEXTALL || s->di.dl==DL_TEXTERROR || |
165 | s->di.dl==DL_TEXTDATE || s->di.dl==DL_TEXTALLDATE || s->di.dl==DL_TEXTERRORDATE) { | 175 | s->di.dl==DL_TEXTDATE || s->di.dl==DL_TEXTALLDATE || s->di.dl==DL_TEXTERRORDATE) { |
166 | smprintf(s, "[ERROR: Missed part of multiframe msg]\n"); | 176 | smprintf(s, "[ERROR: Missed part of multiframe msg]\n"); |
167 | } | 177 | } |
168 | 178 | ||
169 | free(d->Msg.Buffer); | 179 | free(d->Msg.Buffer); |
170 | d->Msg.Length = 0; | 180 | d->Msg.Length = 0; |
171 | d->Msg.Buffer = NULL; | 181 | d->Msg.Buffer = NULL; |
172 | 182 | ||
173 | d->MsgRXState = RX_Sync; | 183 | d->MsgRXState = RX_Sync; |
174 | return ERR_NONE; | 184 | return ERR_NONE; |
175 | } | 185 | } |
176 | 186 | ||
177 | if ((seq_num & 0x40) != 0x40 && d->Msg.Type != d->MultiMsg.Type) { | 187 | if ((seq_num & 0x40) != 0x40 && d->Msg.Type != d->MultiMsg.Type) { |
178 | if (s->di.dl==DL_TEXT || s->di.dl==DL_TEXTALL || s->di.dl==DL_TEXTERROR || | 188 | if (s->di.dl==DL_TEXT || s->di.dl==DL_TEXTALL || s->di.dl==DL_TEXTERROR || |
179 | s->di.dl==DL_TEXTDATE || s->di.dl==DL_TEXTALLDATE || s->di.dl==DL_TEXTERRORDATE) { | 189 | s->di.dl==DL_TEXTDATE || s->di.dl==DL_TEXTALLDATE || s->di.dl==DL_TEXTERRORDATE) { |
180 | smprintf(s, "[ERROR: Multiframe msg in multiframe msg]\n"); | 190 | smprintf(s, "[ERROR: Multiframe msg in multiframe msg]\n"); |
181 | } | 191 | } |
182 | 192 | ||
183 | free(d->Msg.Buffer); | 193 | free(d->Msg.Buffer); |
184 | d->Msg.Length = 0; | 194 | d->Msg.Length = 0; |
185 | d->Msg.Buffer = NULL; | 195 | d->Msg.Buffer = NULL; |
186 | 196 | ||
187 | d->MsgRXState = RX_Sync; | 197 | d->MsgRXState = RX_Sync; |
188 | return ERR_NONE; | 198 | return ERR_NONE; |
189 | } | 199 | } |
190 | 200 | ||
191 | if (d->MultiMsg.BufferUsed < d->MultiMsg.Length+d->Msg.Length-2) { | 201 | if (d->MultiMsg.BufferUsed < d->MultiMsg.Length+d->Msg.Length-2) { |
192 | d->MultiMsg.BufferUsed = d->MultiMsg.Length+d->Msg.Length-2; | 202 | d->MultiMsg.BufferUsed = d->MultiMsg.Length+d->Msg.Length-2; |
193 | d->MultiMsg.Buffer = (unsigned char *)realloc(d->MultiMsg.Buffer,d->MultiMsg.BufferUsed); | 203 | d->MultiMsg.Buffer = (unsigned char *)realloc(d->MultiMsg.Buffer,d->MultiMsg.BufferUsed); |
194 | } | 204 | } |
195 | memcpy(d->MultiMsg.Buffer+d->MultiMsg.Length,d->Msg.Buffer,d->Msg.Length-2); | 205 | memcpy(d->MultiMsg.Buffer+d->MultiMsg.Length,d->Msg.Buffer,d->Msg.Length-2); |
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 | |||
@@ -1,42 +1,51 @@ | |||
1 | /* (c) 2002-2003 by Marcin Wiacek */ | 1 | /* (c) 2002-2003 by Marcin Wiacek */ |
2 | /* based on some work from MyGnokii (www.mwiacek.com) */ | 2 | /* based on some work from MyGnokii (www.mwiacek.com) */ |
3 | /* Based on some work from Gnokii (www.gnokii.org) | 3 | /* Based on some work from Gnokii (www.gnokii.org) |
4 | * (C) 1999-2000 Hugh Blemings & Pavel Janik ml. (C) 2001-2004 Pawel Kot | 4 | * (C) 1999-2000 Hugh Blemings & Pavel Janik ml. (C) 2001-2004 Pawel Kot |
5 | * GNU GPL version 2 or later | 5 | * GNU GPL version 2 or later |
6 | */ | 6 | */ |
7 | /* Due to a problem in the source code management, the names of some of | ||
8 | * the authors have unfortunately been lost. We do not mean to belittle | ||
9 | * their efforts and hope they will contact us to see their names | ||
10 | * properly added to the Copyright notice above. | ||
11 | * Having published their contributions under the terms of the GNU | ||
12 | * General Public License (GPL) [version 2], the Copyright of these | ||
13 | * authors will remain respected by adhering to the license they chose | ||
14 | * to publish their code under. | ||
15 | */ | ||
7 | 16 | ||
8 | #ifndef fbus2_h | 17 | #ifndef fbus2_h |
9 | #define fbus2_h | 18 | #define fbus2_h |
10 | 19 | ||
11 | #include "../protocol.h" | 20 | #include "../protocol.h" |
12 | 21 | ||
13 | #define FBUS2_FRAME_ID 0x1e | 22 | #define FBUS2_FRAME_ID 0x1e |
14 | #define FBUS2_IRDA_FRAME_ID 0x1c | 23 | #define FBUS2_IRDA_FRAME_ID 0x1c |
15 | #define FBUS2_DEVICE_PHONE 0x00 /* Nokia mobile phone */ | 24 | #define FBUS2_DEVICE_PHONE 0x00 /* Nokia mobile phone */ |
16 | #define FBUS2_DEVICE_PC 0x0c /* Our PC */ | 25 | #define FBUS2_DEVICE_PC 0x0c /* Our PC */ |
17 | #define FBUS2_ACK_BYTE 0x7f /* Acknowledge of the received frame */ | 26 | #define FBUS2_ACK_BYTE 0x7f /* Acknowledge of the received frame */ |
18 | 27 | ||
19 | #define FBUS2_MAX_TRANSMIT_LENGTH 120 | 28 | #define FBUS2_MAX_TRANSMIT_LENGTH 120 |
20 | 29 | ||
21 | typedef struct { | 30 | typedef struct { |
22 | int MsgSequenceNumber; | 31 | int MsgSequenceNumber; |
23 | int MsgRXState; | 32 | int MsgRXState; |
24 | int FramesToGo; | 33 | int FramesToGo; |
25 | GSM_Protocol_MessageMultiMsg; | 34 | GSM_Protocol_MessageMultiMsg; |
26 | GSM_Protocol_MessageMsg; | 35 | GSM_Protocol_MessageMsg; |
27 | } GSM_Protocol_FBUS2Data; | 36 | } GSM_Protocol_FBUS2Data; |
28 | 37 | ||
29 | #ifndef GSM_USED_SERIALDEVICE | 38 | #ifndef GSM_USED_SERIALDEVICE |
30 | # define GSM_USED_SERIALDEVICE | 39 | # define GSM_USED_SERIALDEVICE |
31 | #endif | 40 | #endif |
32 | #if defined(GSM_ENABLE_BLUEFBUS2) | 41 | #if defined(GSM_ENABLE_BLUEFBUS2) |
33 | # ifndef GSM_USED_BLUETOOTHDEVICE | 42 | # ifndef GSM_USED_BLUETOOTHDEVICE |
34 | # define GSM_USED_BLUETOOTHDEVICE | 43 | # define GSM_USED_BLUETOOTHDEVICE |
35 | # endif | 44 | # endif |
36 | #endif | 45 | #endif |
37 | 46 | ||
38 | #endif | 47 | #endif |
39 | 48 | ||
40 | /* How should editor hadle tabs in this file? Add editor commands here. | 49 | /* How should editor hadle tabs in this file? Add editor commands here. |
41 | * vim: noexpandtab sw=8 ts=8 sts=8: | 50 | * vim: noexpandtab sw=8 ts=8 sts=8: |
42 | */ | 51 | */ |
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 | |||
@@ -1,53 +1,62 @@ | |||
1 | /* (c) 2002-2003 by Marcin Wiacek */ | 1 | /* (c) 2002-2003 by Marcin Wiacek */ |
2 | /* Based on some work from Gnokii (www.gnokii.org) | 2 | /* Based on some work from Gnokii (www.gnokii.org) |
3 | * (C) 1999-2000 Hugh Blemings & Pavel Janik ml. (C) 2001-2004 Pawel Kot | 3 | * (C) 1999-2000 Hugh Blemings & Pavel Janik ml. (C) 2001-2004 Pawel Kot |
4 | * GNU GPL version 2 or later | 4 | * GNU GPL version 2 or later |
5 | */ | 5 | */ |
6 | /* Due to a problem in the source code management, the names of some of | ||
7 | * the authors have unfortunately been lost. We do not mean to belittle | ||
8 | * their efforts and hope they will contact us to see their names | ||
9 | * properly added to the Copyright notice above. | ||
10 | * Having published their contributions under the terms of the GNU | ||
11 | * General Public License (GPL) [version 2], the Copyright of these | ||
12 | * authors will remain respected by adhering to the license they chose | ||
13 | * to publish their code under. | ||
14 | */ | ||
6 | 15 | ||
7 | #include "../../gsmstate.h" | 16 | #include "../../gsmstate.h" |
8 | 17 | ||
9 | #if defined(GSM_ENABLE_IRDA) || defined(GSM_ENABLE_PHONETBLUE) || defined(GSM_ENABLE_BLUEPHONET) | 18 | #if defined(GSM_ENABLE_IRDA) || defined(GSM_ENABLE_PHONETBLUE) || defined(GSM_ENABLE_BLUEPHONET) |
10 | 19 | ||
11 | #include <stdio.h> | 20 | #include <stdio.h> |
12 | #include <string.h> | 21 | #include <string.h> |
13 | 22 | ||
14 | #include "../../gsmcomon.h" | 23 | #include "../../gsmcomon.h" |
15 | #include "phonet.h" | 24 | #include "phonet.h" |
16 | 25 | ||
17 | static GSM_Error PHONET_WriteMessage (GSM_StateMachine *s, | 26 | static GSM_Error PHONET_WriteMessage (GSM_StateMachine *s, |
18 | unsigned char *MsgBuffer, | 27 | unsigned char *MsgBuffer, |
19 | int MsgLength, | 28 | int MsgLength, |
20 | unsigned char MsgType) | 29 | unsigned char MsgType) |
21 | { | 30 | { |
22 | unsigned char *buffer2; | 31 | unsigned char *buffer2; |
23 | int sent; | 32 | int sent; |
24 | 33 | ||
25 | GSM_DumpMessageLevel3(s, MsgBuffer, MsgLength, MsgType); | 34 | GSM_DumpMessageLevel3(s, MsgBuffer, MsgLength, MsgType); |
26 | 35 | ||
27 | buffer2 = (unsigned char *)malloc(MsgLength + 6); | 36 | buffer2 = (unsigned char *)malloc(MsgLength + 6); |
28 | 37 | ||
29 | buffer2[0] = PHONET_FRAME_ID, | 38 | buffer2[0] = PHONET_FRAME_ID, |
30 | buffer2[1] = PHONET_DEVICE_PHONE; //destination | 39 | buffer2[1] = PHONET_DEVICE_PHONE; //destination |
31 | buffer2[2] = PHONET_DEVICE_PC; //source | 40 | buffer2[2] = PHONET_DEVICE_PC; //source |
32 | 41 | ||
33 | if (s->ConnectionType==GCT_PHONETBLUE || s->ConnectionType==GCT_BLUEPHONET) { | 42 | if (s->ConnectionType==GCT_PHONETBLUE || s->ConnectionType==GCT_BLUEPHONET) { |
34 | buffer2[0] = PHONET_BLUE_FRAME_ID; | 43 | buffer2[0] = PHONET_BLUE_FRAME_ID; |
35 | buffer2[1] = PHONET_DEVICE_PHONE;//destination | 44 | buffer2[1] = PHONET_DEVICE_PHONE;//destination |
36 | buffer2[2] = PHONET_BLUE_DEVICE_PC;//source | 45 | buffer2[2] = PHONET_BLUE_DEVICE_PC;//source |
37 | } | 46 | } |
38 | 47 | ||
39 | buffer2[3] = MsgType; | 48 | buffer2[3] = MsgType; |
40 | buffer2[4] = MsgLength / 256; | 49 | buffer2[4] = MsgLength / 256; |
41 | buffer2[5] = MsgLength % 256; | 50 | buffer2[5] = MsgLength % 256; |
42 | 51 | ||
43 | memcpy(buffer2 + 6, MsgBuffer, MsgLength); | 52 | memcpy(buffer2 + 6, MsgBuffer, MsgLength); |
44 | 53 | ||
45 | GSM_DumpMessageLevel2(s, buffer2+6, MsgLength, MsgType); | 54 | GSM_DumpMessageLevel2(s, buffer2+6, MsgLength, MsgType); |
46 | 55 | ||
47 | /* Sending to phone */ | 56 | /* Sending to phone */ |
48 | sent = s->Device.Functions->WriteDevice(s,buffer2,MsgLength+6); | 57 | sent = s->Device.Functions->WriteDevice(s,buffer2,MsgLength+6); |
49 | 58 | ||
50 | free(buffer2); | 59 | free(buffer2); |
51 | 60 | ||
52 | if (sent!=MsgLength+6) return ERR_DEVICEWRITEERROR; | 61 | if (sent!=MsgLength+6) return ERR_DEVICEWRITEERROR; |
53 | return ERR_NONE; | 62 | return ERR_NONE; |
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 | |||
@@ -1,38 +1,47 @@ | |||
1 | /* (c) 2002-2003 by Marcin Wiacek */ | 1 | /* (c) 2002-2003 by Marcin Wiacek */ |
2 | /* Based on some work from Gnokii (www.gnokii.org) | 2 | /* Based on some work from Gnokii (www.gnokii.org) |
3 | * (C) 1999-2000 Hugh Blemings & Pavel Janik ml. (C) 2001-2004 Pawel Kot | 3 | * (C) 1999-2000 Hugh Blemings & Pavel Janik ml. (C) 2001-2004 Pawel Kot |
4 | * GNU GPL version 2 or later | 4 | * GNU GPL version 2 or later |
5 | */ | 5 | */ |
6 | /* Due to a problem in the source code management, the names of some of | ||
7 | * the authors have unfortunately been lost. We do not mean to belittle | ||
8 | * their efforts and hope they will contact us to see their names | ||
9 | * properly added to the Copyright notice above. | ||
10 | * Having published their contributions under the terms of the GNU | ||
11 | * General Public License (GPL) [version 2], the Copyright of these | ||
12 | * authors will remain respected by adhering to the license they chose | ||
13 | * to publish their code under. | ||
14 | */ | ||
6 | 15 | ||
7 | #ifndef PHONET_h | 16 | #ifndef PHONET_h |
8 | #define PHONET_h | 17 | #define PHONET_h |
9 | 18 | ||
10 | #include "../protocol.h" | 19 | #include "../protocol.h" |
11 | 20 | ||
12 | #define PHONET_FRAME_ID 0x14 | 21 | #define PHONET_FRAME_ID 0x14 |
13 | #define PHONET_BLUE_FRAME_ID0x19 | 22 | #define PHONET_BLUE_FRAME_ID0x19 |
14 | #define PHONET_DEVICE_PHONE 0x00 /* Nokia mobile phone */ | 23 | #define PHONET_DEVICE_PHONE 0x00 /* Nokia mobile phone */ |
15 | #define PHONET_DEVICE_PC 0x0c /* Our PC */ | 24 | #define PHONET_DEVICE_PC 0x0c /* Our PC */ |
16 | #define PHONET_BLUE_DEVICE_PC 0x10 /* Our PC */ | 25 | #define PHONET_BLUE_DEVICE_PC 0x10 /* Our PC */ |
17 | 26 | ||
18 | typedef struct { | 27 | typedef struct { |
19 | int MsgRXState; | 28 | int MsgRXState; |
20 | GSM_Protocol_MessageMsg; | 29 | GSM_Protocol_MessageMsg; |
21 | } GSM_Protocol_PHONETData; | 30 | } GSM_Protocol_PHONETData; |
22 | 31 | ||
23 | #if defined(GSM_ENABLE_IRDAPHONET) | 32 | #if defined(GSM_ENABLE_IRDAPHONET) |
24 | # ifndef GSM_USED_IRDADEVICE | 33 | # ifndef GSM_USED_IRDADEVICE |
25 | # define GSM_USED_IRDADEVICE | 34 | # define GSM_USED_IRDADEVICE |
26 | # endif | 35 | # endif |
27 | #endif | 36 | #endif |
28 | #if defined(GSM_ENABLE_BLUEPHONET) | 37 | #if defined(GSM_ENABLE_BLUEPHONET) |
29 | # ifndef GSM_USED_BLUETOOTHDEVICE | 38 | # ifndef GSM_USED_BLUETOOTHDEVICE |
30 | # define GSM_USED_BLUETOOTHDEVICE | 39 | # define GSM_USED_BLUETOOTHDEVICE |
31 | # endif | 40 | # endif |
32 | #endif | 41 | #endif |
33 | 42 | ||
34 | #endif | 43 | #endif |
35 | 44 | ||
36 | /* How should editor hadle tabs in this file? Add editor commands here. | 45 | /* How should editor hadle tabs in this file? Add editor commands here. |
37 | * vim: noexpandtab sw=8 ts=8 sts=8: | 46 | * vim: noexpandtab sw=8 ts=8 sts=8: |
38 | */ | 47 | */ |