|
1 /* |
|
2 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of the License "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 |
|
20 // INCLUDE FILES |
|
21 #include "dpdef.h" // dataport definitions |
|
22 #include "dpdataport.h" // dataport main and c32 interface |
|
23 #include "dpcommpep.h" // comm pep interface. interaction with mif |
|
24 #include "dpdataconfig.h" // configuration store |
|
25 #include "dpflowctrl.h" // flow control handling |
|
26 #include "dpbreak.h" // break signal handling |
|
27 #include "dpstruct.h" // structures for common pep type |
|
28 #include "dplog.h" // dataport logging |
|
29 |
|
30 #include "pep_comm_types.h" // structures for isi-message interface |
|
31 #include "osttracedefinitions.h" |
|
32 #ifdef OST_TRACE_COMPILER_IN_USE |
|
33 #include "dpcommpeptraces.h" |
|
34 #endif |
|
35 |
|
36 // LOCAL FUNCTION PROTOTYPES |
|
37 // none |
|
38 |
|
39 // ==================== LOCAL FUNCTIONS ==================== |
|
40 |
|
41 // ================= MEMBER FUNCTIONS ======================= |
|
42 |
|
43 // --------------------------------------------------------- |
|
44 // CDpCommPep::CDpCommPep |
|
45 // C++ default constructor. |
|
46 // --------------------------------------------------------- |
|
47 CDpCommPep::CDpCommPep( |
|
48 CDpDataPort& aDataPort ) : |
|
49 iDataPort( aDataPort ), |
|
50 iDataConfig( iDataPort.DataConfig() ), |
|
51 iBreak( iDataPort.BreakHandler() ), |
|
52 iFlowCtrl( iDataPort.FlowCtrl() ) |
|
53 { |
|
54 OstTrace0( TRACE_NORMAL, CDPCOMMPEP_CDPCOMMPEP, "CDpCommPep::CDpCommPep" ); |
|
55 LOGM(" CDpCommPep::CDpCommPep"); |
|
56 } |
|
57 |
|
58 // --------------------------------------------------------- |
|
59 // CDpCommPep::~CDpCommPep |
|
60 // Destructor |
|
61 // --------------------------------------------------------- |
|
62 CDpCommPep::~CDpCommPep() |
|
63 { |
|
64 OstTrace0( TRACE_NORMAL, DUP1_CDPCOMMPEP_CDPCOMMPEP, "CDpCommPep::~CDpCommPep" ); |
|
65 LOGM(" CDpCommPep::~CDpCommPep"); |
|
66 } |
|
67 |
|
68 // --------------------------------------------------------- |
|
69 // CDpCommPep::HandlePepCtrlReq |
|
70 // This method handles PEP control requests, which are |
|
71 // received from DCS. This method forwars handling to |
|
72 // CDpDataConfig (data configuration). |
|
73 // --------------------------------------------------------- |
|
74 // |
|
75 TInt CDpCommPep::HandlePepCtrlReq( |
|
76 const TUint8 aCtrlId, |
|
77 TDesC8& aCtrlData ) |
|
78 { |
|
79 OstTrace0( TRACE_NORMAL, CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep::HandlePepCtrlReq" ); |
|
80 LOGM(" CDpCommPep::HandlePepCtrlReq"); |
|
81 |
|
82 TInt ret( KErrNone ); |
|
83 |
|
84 // Handle control data here |
|
85 switch ( aCtrlId ) |
|
86 { |
|
87 case PEP_COMM_CTRL_ID_PARAM: |
|
88 { |
|
89 LOG(" PEP_COMM_CTRL_ID_PARAM - CommPep Ctrl REQ"); |
|
90 OstTrace0( TRACE_NORMAL, DUP1_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_PARAM - CommPep Ctrl REQ" ); |
|
91 |
|
92 // We skip baudrate,data,stop,parity configurations from CMT. |
|
93 // CMT even should't send them. |
|
94 break; |
|
95 } |
|
96 case PEP_COMM_CTRL_ID_FLOW_CTRL: |
|
97 { |
|
98 LOG(" PEP_COMM_CTRL_ID_FLOW_CTRL - CommPep Ctrl REQ" ); |
|
99 OstTrace0( TRACE_NORMAL, DUP2_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_FLOW_CTRL - CommPep Ctrl REQ" ); |
|
100 |
|
101 // Configuring DTE interface flow control format |
|
102 PEP_COMM_CTRL_ID_FLOW_CTRL_STR& pepParam = |
|
103 *(PEP_COMM_CTRL_ID_FLOW_CTRL_STR*)aCtrlData.Ptr(); |
|
104 |
|
105 // The most common error message here is KErrNotSupported. This |
|
106 // message is forwarded and handled where HandlePepCtrlReq was |
|
107 // called. |
|
108 ret = iDataConfig.SetFlowControlConfig( |
|
109 pepParam.inwards, pepParam.outwards, pepParam.extract); |
|
110 break; |
|
111 } |
|
112 case PEP_COMM_CTRL_ID_BREAK: |
|
113 { |
|
114 PEP_COMM_CTRL_ID_BREAK_STR& pepParam = |
|
115 *(PEP_COMM_CTRL_ID_BREAK_STR*)aCtrlData.Ptr(); |
|
116 |
|
117 LOG1(" PEP_COMM_CTRL_ID_BREAK - CommPep Ctrl REQ, type: %d", |
|
118 pepParam.type); |
|
119 OstTraceExt1( TRACE_NORMAL, DUP3_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_BREAK - CommPep Ctrl REQ, type: %hhu", pepParam.type ); |
|
120 |
|
121 iDataConfig.SetDteTypeOfBreakSignal( pepParam.type ); |
|
122 break; |
|
123 } |
|
124 case PEP_COMM_CTRL_ID_AUTOBAUD: |
|
125 { |
|
126 LOG(" PEP_COMM_CTRL_ID_AUTOBAUD - CommPep Ctrl REQ"); |
|
127 OstTrace0( TRACE_NORMAL, DUP4_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_AUTOBAUD - CommPep Ctrl REQ" ); |
|
128 |
|
129 PEP_COMM_CTRL_ID_AUTOBAUD_STR& pepParam = |
|
130 *(PEP_COMM_CTRL_ID_AUTOBAUD_STR*)aCtrlData.Ptr(); |
|
131 |
|
132 iDataConfig.SetDteParityBitWhen7Mode( pepParam.parity ); |
|
133 iDataConfig.SetDteAutoBauding( pepParam.mode ); |
|
134 break; |
|
135 } |
|
136 case PEP_COMM_CTRL_ID_ESCAPE: |
|
137 { |
|
138 LOG(" PEP_COMM_CTRL_ID_ESCAPE - CommPep Ctrl REQ"); |
|
139 OstTrace0( TRACE_NORMAL, DUP5_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_ESCAPE - CommPep Ctrl REQ" ); |
|
140 |
|
141 // Configuring DTE interface escape sequence |
|
142 PEP_COMM_CTRL_ID_ESCAPE_STR& pepParam = |
|
143 *(PEP_COMM_CTRL_ID_ESCAPE_STR*)aCtrlData.Ptr(); |
|
144 |
|
145 // Set escape sequence parameters in DataConfig-object |
|
146 iDataConfig.SetEscChar( pepParam.character ); |
|
147 iDataConfig.SetEscTime( pepParam.time ); |
|
148 break; |
|
149 } |
|
150 case PEP_COMM_CTRL_ID_SEND_PNP: |
|
151 { |
|
152 LOG(" PEP_COMM_CTRL_ID_SEND_PNP - CommPep Ctrl REQ"); |
|
153 OstTrace0( TRACE_NORMAL, DUP6_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_SEND_PNP - CommPep Ctrl REQ" ); |
|
154 |
|
155 // With this control data a PEP is requested to send the contents |
|
156 // of the Plug and Play table to the DTE. |
|
157 break; |
|
158 } |
|
159 case PEP_COMM_CTRL_ID_DTR_STATUS: |
|
160 { |
|
161 LOG(" PEP_COMM_CTRL_ID_DTR_STATUS - CommPep Ctrl REQ"); |
|
162 OstTrace0( TRACE_NORMAL, DUP7_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_DTR_STATUS - CommPep Ctrl REQ" ); |
|
163 |
|
164 // With this control data the state of DTR signal can be asked from |
|
165 // Media PEP. this request is not supported. |
|
166 break; |
|
167 } |
|
168 case PEP_COMM_CTRL_ID_ECHO: |
|
169 { |
|
170 LOG(" PEP_COMM_CTRL_ID_ECHO - CommPep Ctrl REQ" ); |
|
171 OstTrace0( TRACE_NORMAL, DUP8_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: PEP_COMM_CTRL_ID_ECHO - CommPep Ctrl REQ" ); |
|
172 |
|
173 // With this control data a PEP is requested to set echoing of |
|
174 // characters received from DTE on or off. |
|
175 PEP_COMM_CTRL_ID_ECHO_STR& pepParam = |
|
176 *(PEP_COMM_CTRL_ID_ECHO_STR*)aCtrlData.Ptr(); |
|
177 iDataConfig.SetEchoDte( pepParam.mode ); |
|
178 break; |
|
179 } |
|
180 // Unknown control ID - return an error message. |
|
181 default: |
|
182 { |
|
183 LOG(" ERROR - Unknown CommPep Ctrl REQ" ); |
|
184 OstTrace0( TRACE_NORMAL, DUP9_CDPCOMMPEP_HANDLEPEPCTRLREQ, "CDpCommPep:: ERROR - Unknown CommPep Ctrl REQ" ); |
|
185 |
|
186 ret = KErrGeneral; |
|
187 } |
|
188 } |
|
189 |
|
190 return ret; |
|
191 } |
|
192 |
|
193 // --------------------------------------------------------- |
|
194 // CDpCommPep::HandlePepStatusInd |
|
195 // This method handles COMM type PEP status indications, |
|
196 // which are received from DCS. |
|
197 // --------------------------------------------------------- |
|
198 // |
|
199 TInt CDpCommPep::HandlePepStatusInd( |
|
200 const TUint8 aIndId, |
|
201 TDesC8& aIndData ) |
|
202 { |
|
203 OstTrace0( TRACE_NORMAL, CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep::HandlePepStatusInd" ); |
|
204 LOGM(" CDpCommPep::HandlePepStatusInd"); |
|
205 |
|
206 TInt ret( KErrNone ); |
|
207 |
|
208 // Handle control data here. |
|
209 switch ( aIndId ) |
|
210 { |
|
211 case PEP_COMM_IND_ID_PARAM: |
|
212 { |
|
213 LOG(" PEP_COMM_IND_ID_PARAM - CommPep status indication"); |
|
214 OstTrace0( TRACE_NORMAL, DUP1_CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep:: PEP_COMM_IND_ID_PARAM - CommPep status indication" ); |
|
215 |
|
216 // DTE should not get these messages. |
|
217 break; |
|
218 } |
|
219 case PEP_COMM_IND_ID_FLOW_CTRL: |
|
220 { |
|
221 LOG(" PEP_COMM_IND_ID_FLOWCTRL - CommPep status indication"); |
|
222 OstTrace0( TRACE_NORMAL, DUP2_CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep:: PEP_COMM_IND_ID_FLOWCTRL - CommPep status indication" ); |
|
223 |
|
224 // DTE should not get these messages. |
|
225 break; |
|
226 } |
|
227 case PEP_COMM_IND_ID_V24_CHANGE: |
|
228 { |
|
229 LOG(" PEP_COMM_IND_ID_V24_CHANGE - CommPep status indication"); |
|
230 OstTrace0( TRACE_NORMAL, DUP3_CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep:: PEP_COMM_IND_ID_V24_CHANGE - CommPep status indication" ); |
|
231 |
|
232 // Signal state change |
|
233 ret = iDataConfig.MapSignalsCmt2Epoc( aIndData ); |
|
234 |
|
235 // We must notify client when starting |
|
236 // i.e. DataPort is ready to receive data from DTE. |
|
237 iFlowCtrl.NotifyClientDatapotReadyforDteFlow(); |
|
238 break; |
|
239 } |
|
240 case PEP_COMM_IND_ID_BREAK: |
|
241 { |
|
242 LOG(" PEP_COMM_IND_ID_BREAK - CommPep status indication" ); |
|
243 OstTrace0( TRACE_NORMAL, DUP4_CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep:: PEP_COMM_IND_ID_BREAK - CommPep status indication" ); |
|
244 |
|
245 // Set BREAK towards DTE |
|
246 TBool notifyValue; |
|
247 |
|
248 // Find out should we notify client |
|
249 iBreak.GetBreakNotify( notifyValue ); |
|
250 |
|
251 if ( notifyValue ) |
|
252 { |
|
253 // Notify client, there is no way to tell signal length |
|
254 // to client so dump pepParam.signalLength here. |
|
255 LOG(" CDpCommPep::HandlePepStatusInd, Complete break notify"); |
|
256 OstTrace0( TRACE_NORMAL, DUP5_CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep:: HandlePepStatusInd, Complete break notify" ); |
|
257 |
|
258 iBreak.CompleteBreakNotify(); |
|
259 } |
|
260 break; |
|
261 } |
|
262 default: |
|
263 { |
|
264 LOG1(" ERROR - Unknown CommPep status indication: %d", aIndId ); |
|
265 OstTraceExt1( TRACE_NORMAL, DUP6_CDPCOMMPEP_HANDLEPEPSTATUSIND, "CDpCommPep:: ERROR - Unknown CommPep status indication: %hhu", aIndId ); |
|
266 |
|
267 ret = KErrGeneral; |
|
268 } |
|
269 } |
|
270 |
|
271 return ret; |
|
272 } |
|
273 |
|
274 |
|
275 // ================= OTHER EXPORTED FUNCTIONS ============== |
|
276 // none |
|
277 |
|
278 // End of File |