47 self->StartL( KATExtSrvName ); |
49 self->StartL( KATExtSrvName ); |
48 RThread().SetPriority( EPriorityNormal ); |
50 RThread().SetPriority( EPriorityNormal ); |
49 return self; |
51 return self; |
50 } |
52 } |
51 |
53 |
52 void CModemAtSrv::RemovePipe( const TUint8 aDteId ) |
54 void CModemAtSrv::RemovePipe() |
53 { |
55 { |
54 C_TRACE((_L("CModemAtSrv::RemovePipe()") )); |
56 C_TRACE((_L("CModemAtSrv::RemovePipe()") )); |
55 iHandler->RemovePipe( aDteId ); |
57 iHandler->RemovePipe( iDteId ); |
56 } |
58 } |
57 |
59 |
58 void CModemAtSrv::ClientClosed( CModemAtSession* aSession ) |
60 void CModemAtSrv::ClientClosed( CModemAtSession* aSession ) |
59 { |
61 { |
60 C_TRACE (( _L("CModemAtSrv::ClientClosed()") )); |
62 C_TRACE (( _L("CModemAtSrv::ClientClosed()") )); |
61 TInt index = iSessions.Find( aSession ); |
63 TInt index = iSessions.Find( aSession ); |
62 if( index >= 0 ) |
64 if( index >= 0 ) |
63 { |
65 { |
64 //remove session from routing table, if dteId exists |
|
65 if(iSessions[index]->GetDteId() != KInitialDteId ) |
|
66 { |
|
67 iRouteTable[ iSessions[index]->GetPluginType() ][ iSessions[index]->GetDteId() ] = NULL; |
|
68 } |
|
69 |
66 |
70 if( iSessions.Count() == 1 ) |
67 if( iSessions.Count() == 1 ) |
71 { |
68 { |
72 C_TRACE((_L("Disconnecting ISI message handler ") )); |
69 C_TRACE((_L("Disconnecting ISI message handler ") )); |
73 iHandler->Disconnect( iSessions[ index ]->GetDteId() ); |
70 iHandler->Disconnect( iDteId ); |
74 } |
71 } |
75 |
72 |
76 C_TRACE((_L("Removing session (plugin type %d dteid: %d)"), iSessions[index]->GetPluginType(), iSessions[index]->GetDteId() )); |
73 C_TRACE((_L("Removing session (plugin type %d)"), iSessions[index]->GetPluginType() )); |
77 iSessions.Remove( index ); |
74 iSessions.Remove( index ); |
78 |
75 |
79 C_TRACE((_T("<<CModemAtSrv::ClientClosed()") )); |
76 C_TRACE((_T("<<CModemAtSrv::ClientClosed()") )); |
80 } |
77 } |
81 } |
78 } |
82 |
79 |
83 CSession2* CModemAtSrv::NewSessionL( const TVersion& aVersion, |
80 CSession2* CModemAtSrv::NewSessionL( const TVersion& aVersion, |
94 |
91 |
95 void CModemAtSrv::ConstructL() |
92 void CModemAtSrv::ConstructL() |
96 { |
93 { |
97 C_TRACE (( _T("CModemAtSrv::ConstructL()") )); |
94 C_TRACE (( _T("CModemAtSrv::ConstructL()") )); |
98 iHandler = CModemAtHandler::NewL( *this ); |
95 iHandler = CModemAtHandler::NewL( *this ); |
99 |
|
100 //setup routing table |
|
101 for( TInt i = 0 ; i < KPluginCount ; i++) |
|
102 { |
|
103 for(TInt o = 0; o < KMaxDteIdCount; o++) |
|
104 { |
|
105 iRouteTable[ i ][ o ] = NULL; |
|
106 } |
|
107 } |
|
108 } |
96 } |
109 |
97 |
110 void CModemAtSrv::HandleSignalInd( const TInt aDteId ) |
98 void CModemAtSrv::HandleSignalInd( const TUint8 aDteId ) |
111 { |
99 { |
112 C_TRACE ((_T("CModemAtSrv::HandleSignalInd aDteId = %d sessions = %d"), aDteId, iSessions.Count() )); |
100 C_TRACE ((_T("CModemAtSrv::HandleSignalInd aDteId = %d sessions = %d"), aDteId, iSessions.Count() )); |
113 for( TInt i = 0; i < iSessions.Count(); i++ ) |
101 for( TInt i = 0; i < iSessions.Count(); i++ ) |
114 { |
102 { |
115 if( iSessions[i]->GetDteId() == aDteId && iSessions[i]->IsSignalIndReqActive() ) |
103 if( iDteId == aDteId && iSessions[i]->IsSignalIndReqActive() ) |
116 { |
104 { |
117 C_TRACE (( _T("CModemAtSrv::HandleSignalInd() session found") )); |
105 C_TRACE (( _T("CModemAtSrv::HandleSignalInd() session found") )); |
118 iSessions[i]->SignalIndReceived(); |
106 iSessions[i]->SignalIndReceived(); |
119 } |
107 } |
120 } |
108 } |
121 } |
109 } |
122 |
110 |
123 void CModemAtSrv::HandleUnsolicitedData( const TInt aDteId, const TDesC8& aData ) |
111 void CModemAtSrv::HandleUnsolicitedData( const TUint8 aDteId, const TDesC8& aData ) |
124 { |
112 { |
125 C_TRACE ((_T("CModemAtSrv::HandleUnsolicitedData aDteId = %d sessions = %d"), aDteId, iSessions.Count() )); |
113 C_TRACE ((_T("CModemAtSrv::HandleUnsolicitedData aDteId = %d sessions = %d"), aDteId, iSessions.Count() )); |
126 for( TInt i = 0; i < iSessions.Count(); i++ ) |
114 for( TInt i = 0; i < iSessions.Count(); i++ ) |
127 { |
115 { |
128 if( (iSessions[i]->GetDteId() == aDteId || aDteId == KUnsolicitedDataDteId )&& |
116 if( ( iDteId == aDteId || aDteId == KUnsolicitedDataDteId )&& |
129 iSessions[i]->IsUnsolicitedDataReqActive() && |
117 iSessions[i]->IsUnsolicitedDataReqActive() && |
130 iSessions[i]->GetPluginType() == EATExtPlugin ) |
118 iSessions[i]->GetPluginType() == EATExtPlugin ) |
131 { |
119 { |
132 C_TRACE (( _T("CModemAtSrv::HandleUnsolicitedData() session found") )); |
120 C_TRACE (( _T("CModemAtSrv::HandleUnsolicitedData() session found") )); |
133 iSessions[i]->UnsolicitedData( aData ); |
121 iSessions[i]->UnsolicitedData( aData ); |
134 } |
122 } |
135 } |
123 } |
136 } |
124 } |
137 |
125 |
138 void CModemAtSrv::HandleCommandModeChange( TInt aDteId, TCommandMode aMode ) |
126 void CModemAtSrv::HandleCommandModeChange( TCommandMode aMode ) |
139 { |
127 { |
140 C_TRACE ((_T("CModemAtSrv::HandleCommandModeChange aDteId = %d sessions = %d mode = %d"), aDteId, iSessions.Count(), (TInt) aMode )); |
128 C_TRACE ((_T("CModemAtSrv::HandleCommandModeChange sessions = %d mode = %d"), iSessions.Count(), (TInt) aMode )); |
141 for( TInt i = 0; i < iSessions.Count(); i++ ) |
129 for( TInt i = 0; i < iSessions.Count(); i++ ) |
142 { |
130 { |
143 if( iSessions[i]->GetDteId() == aDteId && |
131 if( iSessions[i]->IsCommandModeReqActive() && |
144 iSessions[i]->IsCommandModeReqActive() && |
|
145 iSessions[i]->GetPluginType() == ECommonPlugin ) |
132 iSessions[i]->GetPluginType() == ECommonPlugin ) |
146 { |
133 { |
147 C_TRACE (( _T("CModemAtSrv::HandleCommandModeChange() session found") )); |
134 C_TRACE (( _T("CModemAtSrv::HandleCommandModeChange() session found") )); |
148 iSessions[i]->CommandModeChanged( aMode ); |
135 iSessions[i]->CommandModeChanged( aMode ); |
149 } |
136 } |
150 } |
137 } |
151 } |
138 } |
152 |
139 |
153 void CModemAtSrv::BroadcastModemConnected(const TUint aDteId, TInt aErr ) |
140 void CModemAtSrv::HandleIntermediateDataInd( const TUint8 aDteId, |
154 { |
|
155 C_TRACE ((_T("CModemAtSrv::BroadcastModemConnected aDteId = %d err = %d sessions = %d"), aDteId, aErr, iSessions.Count() )); |
|
156 for( TInt i = 0; i < iSessions.Count(); i++ ) |
|
157 { |
|
158 if( iSessions[i]->GetDteId() == aDteId && iSessions[i]->IsConnectReqActive() ) |
|
159 { |
|
160 C_TRACE (( _T("CModemAtSrv::BroadcastModemConnected() session found") )); |
|
161 iSessions[i]->ModemConnected( aErr ); |
|
162 } |
|
163 } |
|
164 } |
|
165 |
|
166 void CModemAtSrv::HandleIntermediateDataInd( const TInt aDteId, |
|
167 const TATPluginInterface aPluginType, |
141 const TATPluginInterface aPluginType, |
168 const TDesC8& aResponse, |
142 const TDesC8& aResponse, |
169 const TUint8 aCommand ) |
143 const TUint8 aCommand ) |
170 { |
144 { |
171 C_TRACE ((_T("CModemAtSrv::HandleIntermediateDataInd aDteId = %d sessions = %d "), aDteId, iSessions.Count() )); |
145 C_TRACE ((_T("CModemAtSrv::HandleIntermediateDataInd aDteId = %d sessions = %d "), aDteId, iSessions.Count() )); |
202 HandleUnsolicitedData( aDteId, aResponse); |
176 HandleUnsolicitedData( aDteId, aResponse); |
203 } |
177 } |
204 C_TRACE ((_T("<<CModemAtSrv::HandleATResponse()") )); |
178 C_TRACE ((_T("<<CModemAtSrv::HandleATResponse()") )); |
205 } |
179 } |
206 |
180 |
207 TInt CModemAtSrv::ConnectToModem(CModemAtSession* aSession) |
181 TInt CModemAtSrv::ConnectToModem( CModemAtSession* aSession, TATPluginInterface aPluginType ) |
208 { |
182 { |
209 C_TRACE ((_T(">>CModemAtSrv::ConnectToModem 0x%x"), aSession)); |
183 C_TRACE ((_T(">>CModemAtSrv::ConnectToModem 0x%x"), aSession)); |
210 TInt type = aSession->GetPluginType(); |
184 |
211 |
185 C_TRACE(( _L("session count: %d, type: %d"), iSessions.Count(), (TInt) aPluginType )); |
212 C_TRACE(( _L("session count: %d, type: %d"), iSessions.Count(), type )); |
186 |
213 //find already defined dteid |
187 if( aPluginType == ECommonPlugin ) |
214 for(TInt i = 0; i < iSessions.Count(); i++) |
188 { |
215 { |
189 C_TRACE ((_T("Common plug-in connecting"))); |
216 TInt dteid = iSessions[i]->GetDteId(); |
190 C_TRACE ((_T("<<CModemAtSrv::ConnectToModem iDteId: %d, session: 0x%x"), iDteId, aSession)); |
217 TDesC8& name = iSessions[i]->GetName(); |
191 return iHandler->Connect( iDteId ); |
218 C_TRACE((_L("i: %d, dteid: %d"), i, dteid)); |
192 } |
219 |
193 else |
220 //Is there plugin with samename |
194 { |
221 if( name.Compare(aSession->GetName())== 0 && dteid != KInitialDteId ) |
195 C_TRACE ((_T("Atext plug-in connecting"))); |
222 { |
196 |
223 if( type == iSessions[i]->GetPluginType()) |
197 aSession->ModemConnected( KErrNone ); |
224 { |
198 C_TRACE ((_T("<<CModemAtSrv::ConnectToModem 0x%x"), aSession)); |
225 TRACE_ASSERT_ALWAYS; |
199 return KErrNone; |
226 aSession->SetDteId( dteid ); |
200 } |
227 C_TRACE ((_T("<<CModemAtSrv::ConnectToModem KErrAlreadyExists 0x%x"), aSession)); |
201 |
228 return KErrAlreadyExists; |
202 } |
229 } |
203 |
230 //add current session to route table |
204 void CModemAtSrv::AddToSendFifo( const TATPluginInterface aPluginType, CAtMessage* aMessage ) |
231 C_TRACE((_L("AddSessionToRouteTable type: %d, dteid: %d"), type, aSession->GetDteId())); |
205 { |
232 iRouteTable[aSession->GetPluginType()][dteid] = aSession; |
206 C_TRACE (( _T("CModemAtSrv::AddToSendFifo( aPluginType: %d, aMessage: 0x%x)"), (TInt)aPluginType, aMessage)); |
233 C_TRACE((_L("Interface exists=> %d"),dteid)); |
|
234 |
|
235 aSession->SetDteId( dteid ); |
|
236 C_TRACE ((_T("<<CModemAtSrv::ConnectToModem KErrNone 0x%x"), aSession)); |
|
237 return KErrNone; |
|
238 } |
|
239 } |
|
240 |
|
241 //no AT-plugin& Common plugin, find first free dteid |
|
242 TInt dteId = 0; |
|
243 while(iRouteTable[0][dteId] || iRouteTable[1][dteId]) |
|
244 { |
|
245 dteId++; |
|
246 } |
|
247 ASSERT_PANIC_ALWAYS( dteId < KMaxDteIdCount ); |
|
248 iRouteTable[type][dteId] = aSession; |
|
249 C_TRACE((_L("Added new dteid: %d"),dteId)); |
|
250 |
|
251 aSession->SetDteId(dteId); |
|
252 C_TRACE ((_T("<<CModemAtSrv::ConnectToModem session: 0x%x"), aSession)); |
|
253 return iHandler->Connect( dteId ); |
|
254 } |
|
255 |
|
256 void CModemAtSrv::AddToSendFifo( const TUint8 aDteId, |
|
257 const TATPluginInterface aPluginType, |
|
258 CAtMessage* aMessage ) |
|
259 { |
|
260 C_TRACE (( _T("CModemAtSrv::AddToSendFifo( dteId = %d,0x%x)"), aDteId, aMessage )); |
|
261 |
207 |
262 iAtMessageArray.Append( aMessage ); // only one AT command at the time in modem |
208 iAtMessageArray.Append( aMessage ); // only one AT command at the time in modem |
263 |
209 |
264 if( iAtMessageArray.Count() == 1 ) //if empty Fifo send immediately |
210 if( iAtMessageArray.Count() == 1 ) //if empty Fifo send immediately |
265 { |
211 { |
266 C_TRACE((_L("Sending message immediately"))); |
212 C_TRACE((_L("Sending message immediately"))); |
267 iHandler->SendATCommand( aDteId, |
213 iHandler->SendATCommand( iDteId, |
268 aPluginType, |
214 aPluginType, |
269 aMessage->GetMessageType(), |
215 aMessage->GetMessageType(), |
270 aMessage->GetBuffer() ); |
216 aMessage->GetBuffer() ); |
271 } |
217 } |
272 } |
218 } |