diff -r 25fce757be94 -r e02eb84a14d2 usbclasses/pictbridgeengine/src/dpsoperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbclasses/pictbridgeengine/src/dpsoperation.cpp Wed Sep 01 12:20:49 2010 +0100 @@ -0,0 +1,1033 @@ +/* +* Copyright (c) 2006, 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: These classes implement dps operations replies. +* +*/ + + +#include +#include "dpsoperation.h" +#include "dpsconst.h" +#include "dpstransaction.h" +#include "pictbridge.h" +#include "dpsxmlparser.h" +#include "dpsxmlgenerator.h" +#include "dpsstatemachine.h" + +#ifdef _DEBUG +# define IF_DEBUG(t) {RDebug::t;} +#else +# define IF_DEBUG(t) +#endif + +const TInt KConfigPrintService = 5; +const TInt KCopyFileWidth = 3; +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +EXPORT_C void TMDpsOperation::CreateReqScriptL( + const TDpsArgArray& aArguments, + const TDpsEleArray& /*aElements*/, + TDpsAttribute /*aAttribute*/, + RWriteStream& aScript, + CDpsTransaction* aTrader) + { + IF_DEBUG(Print(_L(">>>TMDpsOperation::CreateReqScript"))); + CDpsXmlGenerator* g = aTrader->Generator(); + g->StartDocumentL(aScript); + g->StartInputL(aScript); + TInt count = aArguments.Count(); + if (!count) + { + g->StartOperationL((TDpsOperation)iOperation, aScript, ETrue); + } + else + { + g->StartOperationL((TDpsOperation)iOperation, aScript); + for (TInt i = 0; i < count; i++) + { + g->CreateArgL(aScript, aArguments[i]); + } + g->EndOperationL((TDpsOperation)iOperation, aScript); + } + + g->EndInputL(aScript); + g->EndDocumentL(aScript); + IF_DEBUG(Print(_L("<<>>TDpsStartJob::FillReqArgs"))); + TInt imageCount = iReqParam.iPrintInfo.Count(); + if (!imageCount) + { + return KErrUnknown; + } + TUint32* objectHandles = new TUint32[imageCount]; + if (!objectHandles) + { + return KErrNoMemory; + } + for (TInt i = 0; i < imageCount; i++) + { + TInt err = aTrader->Engine()->Ptp(). + GetObjectHandleByName( + iReqParam.iPrintInfo[i].iFile, objectHandles[i], ETrue); + if (err != KErrNone) + { + IF_DEBUG(Print(_L("---error %d"), err)); + + delete[] objectHandles; + return err; + } + } + TDpsArg* argsP = new TDpsArg[iReqParam.GetParamNum()]; + if (!argsP) + { + delete[] objectHandles; + return KErrNoMemory; + } + TDpsEle* elemsP = new TDpsEle[1 + imageCount]; + if (!elemsP) + { + delete[] argsP; + delete[] objectHandles; + return KErrNoMemory; + } + // jobConfig + TInt count = iReqParam.iJobConfig.Count(); + + TInt ret = KErrNone; + + elemsP[0].iElement = EDpsJobConfig; + elemsP[0].iNum = count; + if ( (ret = aElements.Append(elemsP[0])) != KErrNone ) + { + IF_DEBUG(Print(_L("*** append error"))); + return ret; + } + for (TInt i = 0; i < count; i++) + { + argsP[i].iElement = iReqParam.iJobConfig[i].iElement; + // the parameter only has high bytes (0x1234) + argsP[i].iContent.AppendNumUC(iReqParam.iJobConfig[i].iContent, EHex); + // we have to append the low bytes (0000) + argsP[i].iContent.Append(KDpsLowZero); + if ( (ret = aArgs.Append(argsP[i])) != KErrNone ) + { + IF_DEBUG(Print(_L("*** append error"))); + return ret; + } + IF_DEBUG(Print(_L("the element is %d"), argsP[i].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[i].iContent))); + } + // printInfo + for (TInt j = 0; j < imageCount; j++) + { + // there is at least one argument for fileID + TInt k = 1; + elemsP[j + 1].iElement = EDpsPrintInfo; + argsP[count].iElement = EDpsArgFileID; + argsP[count].iContent.AppendNumFixedWidth(objectHandles[j], EHex, + KFullWordWidth); + if ( (ret = aArgs.Append(argsP[count])) != KErrNone ) + { + IF_DEBUG(Print(_L("*** append error"))); + return ret; + } + + + IF_DEBUG(Print(_L("the element is %d"), argsP[count].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[count].iContent))); + count++; + + // not empty + if (iReqParam.iPrintInfo[j].iFileName) + { + argsP[count].iElement = EDpsArgFileName; + argsP[count].iContent.Copy(iReqParam.iPrintInfo[j].iFile); + if ( (ret = aArgs.Append(argsP[count])) != KErrNone) + { + IF_DEBUG(Print(_L("*** append error"))); + return ret; + } + + IF_DEBUG(Print(_L("the element is %d"), argsP[count].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[count].iContent))); + + k++; count++; + } + // not empty + if (iReqParam.iPrintInfo[j].iDate.Size()) + { + argsP[count].iElement = EDpsArgDate; + argsP[count].iContent.Copy(iReqParam.iPrintInfo[j].iDate); + if ( (ret = aArgs.Append(argsP[count])) != KErrNone) + { + IF_DEBUG(Print(_L("*** append error"))); + return ret; + } + IF_DEBUG(Print(_L("the element is %d"), argsP[count].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[count].iContent))); + k++; count++; + } + if (iReqParam.iPrintInfo[j].iCopies != 0) + { + argsP[count].iElement = EDpsArgCopies; + argsP[count].iContent.AppendNumFixedWidthUC( + iReqParam.iPrintInfo[j].iCopies, EDecimal, KCopyFileWidth); + if ( (ret = aArgs.Append(argsP[count])) != KErrNone) + { + IF_DEBUG(Print(_L("*** append error"))); + return ret; + } + IF_DEBUG(Print(_L("the element is %d"), argsP[count].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[count].iContent))); + k++; count++; + } + if (iReqParam.iPrintInfo[j].iPrtPID != 0) + { + argsP[count].iElement = EDpsArgPrtPID; + argsP[count].iContent.AppendNumUC(iReqParam.iPrintInfo[j].iPrtPID); + if ( (ret = aArgs.Append(argsP[count])) != KErrNone) + { + IF_DEBUG(Print(_L("*** append error"))); + return ret; + } + IF_DEBUG(Print(_L("the element is %d"), argsP[count].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[count].iContent))); + k++; count++; + } + if (iReqParam.iPrintInfo[j].iCopyID != 0) + { + argsP[count].iElement = EDpsArgCopyID; + argsP[count].iContent.AppendNumUC(iReqParam.iPrintInfo[j].iCopyID); + if ( (ret = aArgs.Append(argsP[count])) != KErrNone) + { + IF_DEBUG(Print(_L("*** append error"))); + return ret; + } + IF_DEBUG(Print(_L("the element is %d"), argsP[count].iElement)); + IF_DEBUG(Print(_L("the content is %S"), &(argsP[count].iContent))); + k++; count++; + } + + elemsP[j + 1].iNum = k; + if ( (ret = aElements.Append(elemsP[j + 1])) != KErrNone) + { + IF_DEBUG(Print(_L("*** append error"))); + return ret; + } + } + + delete[] objectHandles; + delete[] argsP; + delete[] elemsP; + IF_DEBUG(Print(_L("<<>>TDpsStartJob::CreateReqScript"))); + CDpsXmlGenerator* g = aTrader->Generator(); + g->StartDocumentL(aScript); + g->StartInputL(aScript); + g->StartOperationL((TDpsOperation)iOperation, aScript); + TInt count = aElements.Count(); + TInt limit = 0; + for (TInt i = 0; i < count; i++) + { + g->StartElementL(aElements[i].iElement, aScript); + TInt init = limit; + limit = (i == 0 ? aElements[0].iNum : limit + aElements[i].iNum); + for (TInt j = init; j < limit; j++) + { + g->CreateArgL(aScript,aArguments[j]); + } + g->EndElementL(aElements[i].iElement, aScript); + } + g->EndOperationL((TDpsOperation)iOperation, aScript); + g->EndInputL(aScript); + g->EndDocumentL(aScript); + IF_DEBUG(Print(_L("<<>>TDpsAbortJob::FillReqArgs"))); + TDpsArg arg; + arg.iElement = EDpsArgAbortStyle; + arg.iContent.AppendNumUC(iReqParam.iAbortStyle, EHex); + arg.iContent.Append(KDpsLowZero); + TInt ret = aArgs.Append(arg); + if (ret != KErrNone) + { + IF_DEBUG(Print(_L("*** append error"))); + } + IF_DEBUG(Print(_L("<<>>TDpsGetCapability::FillReqArgs"))); + // only one element + TDpsEle elems; + elems.iElement = EDpsCapability; + elems.iNum = 1; + TInt ret = KErrNone; + if ( (ret = aElements.Append(elems)) != KErrNone) + { + IF_DEBUG(Print(_L("*** append error"))); + return ret; + } + + // only one parameter + TDpsArg argsP; + argsP.iElement = iReqParam.iCap; + if ( (ret = aArgs.Append(argsP)) != KErrNone) + { + IF_DEBUG(Print(_L("*** append error"))); + return ret; + } + if (EDpsArgPaperTypes == iReqParam.iCap || EDpsArgLayouts == iReqParam.iCap) + { + if (iReqParam.iAttribute != 0) + { + aAttrib = iReqParam.iAttribute; + } + } + IF_DEBUG(Print(_L("<<>>TDpsGetCapability::CreateReqScript"))); + CDpsXmlGenerator* g = aTrader->Generator(); + g->StartDocumentL(aScript); + g->StartInputL(aScript); + g->StartOperationL((TDpsOperation)iOperation, aScript); + g->StartElementL(aElements[0].iElement, aScript); + const TInt count = aArguments.Count(); + for (TInt i = 0; i < count; i++) + { + g->CreateArgL(aScript, aArguments[i], aAttribute); + } + g->EndElementL(aElements[0].iElement, aScript); + g->EndOperationL((TDpsOperation)iOperation, aScript); + g->EndInputL(aScript); + g->EndDocumentL(aScript); + IF_DEBUG(Print(_L("<<>>TDpsConfigPrintService::FillReqArgs"))); + TDpsArg* argsP = new TDpsArg[KConfigPrintService]; + if (!argsP) + { + return KErrNoMemory; + } + TInt count; + TInt ret = KErrNone; + for (TInt i = 0; i < KConfigPrintService; i++) + { + switch (i) + { + // there might be several versions + case EDpsArgDpsVersions: + argsP[i].iElement = EDpsArgDpsVersions; + count = iReqParam.iDpsVersions.Count(); + for (TInt j = 0; j < count; j++) + { + argsP[i].iContent.AppendNumUC + (iReqParam.iDpsVersions[j].iMajor); + argsP[i].iContent.Append(_L(".")); + argsP[i].iContent.AppendNumUC + (iReqParam.iDpsVersions[j].iMinor); + } + ret = aArgs.Append(argsP[i]); + break; + + case EDpsArgVendorName: // vender name + + argsP[i].iElement = EDpsArgVendorName; + argsP[i].iContent.Append(iReqParam.iVendorName); + ret = aArgs.Append(argsP[i]); + + break; + + case EDpsArgVendorSpecificVersion: // vender version (optional) + if (iReqParam.iVendorVersion.iMajor && + iReqParam.iVendorVersion.iMinor) + { + argsP[i].iElement = EDpsArgVendorSpecificVersion; + argsP[i].iContent.AppendNumUC(iReqParam.iVendorVersion.iMajor); + argsP[i].iContent.Append(_L(".")); + argsP[i].iContent.AppendNumUC(iReqParam.iVendorVersion.iMinor); + ret = aArgs.Append(argsP[i]); + } + + break; + + case EDpsArgProductName: // produce name + argsP[i].iElement = EDpsArgProductName; + argsP[i].iContent.Append(iReqParam.iProductName); + ret = aArgs.Append(argsP[i]); + break; + + case EDpsArgSerialNo: // serialNo (optional) + if (iReqParam.iSerialNo.Length()) + { + argsP[i].iElement = EDpsArgSerialNo; + argsP[i].iContent.Append(iReqParam.iSerialNo); + ret = aArgs.Append(argsP[i]); + } + + break; + + default: + IF_DEBUG(Print(_L("***Wrong parameter"))); + delete[] argsP; + return KErrArgument; + } + + } + + if (ret != KErrNone) + { + IF_DEBUG(Print( _L("***TDpsConfigPrintService::FillReqArgs append error = %d"), ret)); + } + + delete[] argsP; + IF_DEBUG(Print(_L("<<>>TDpsGetCapability::FillRepArgs"))); + CDpsXmlParser* XmlPar = aTrader->Parser(); + + TInt ret = KErrNone; + + if (aArgs.Count()) + { + if (EDpsArgPaperTypes == aArgs[0].iElement || + EDpsArgLayouts == aArgs[0].iElement) + { + if (XmlPar->HasAttribute()) + { + TDpsAttribute attrib; + XmlPar->GetAttribute(attrib); + ret = iRepParam.iContent.Append(attrib); + } + else + { + ret = iRepParam.iContent.Append(0); + } + + if (ret != KErrNone) + { + IF_DEBUG(Print(_L("*** append error"))); + return ret; + } + } + TUint32 value; + TLex8 converter; + TLex8 parser(aArgs[0].iContent); + parser.SkipSpace(); + while (!parser.Eos()) + { + parser.Mark(); + parser.SkipCharacters(); + if (KFullWordWidth == parser.TokenLength()) + { + TPtrC8 token = parser.MarkedToken(); + converter.Assign(token); + parser.SkipSpace(); + } + else + { + IF_DEBUG(Print(_L("***Wrong argument"))); + return KErrArgument; + } + TInt error = converter.Val(value, EHex); + if (error != KErrNone) + { + IF_DEBUG(Print(_L("convert error %d"), error)); + return error; + } + if (EDpsArgPaperTypes == aArgs[0].iElement) + { + TDpsPaperType paperType; + TInt major = value >> KShiftLength; + paperType.iMajor = (TDpsPaperTypeMajor)major; + paperType.iMinor = (TDpsPaperTypeMinor)(value & KDpsMinorMask); + ret = iRepParam.iPaperType.Append(paperType); + } + else + { + // remove the extra zeros + value = value >> KShiftLength; + ret = iRepParam.iContent.Append(value); + IF_DEBUG(Print(_L("the value is %x"), value)); + } + + if (ret != KErrNone) + { + IF_DEBUG(Print(_L("*** append error"))); + return ret; + } + } + iRepParam.iCap = aArgs[0].iElement; + + } + + IF_DEBUG(Print(_L("<<>>TDpsConfigPrintService::FillRepArgs"))); + TInt error = KErrNone; + TLex8 converter, parser; + const TInt count = aArgs.Count(); + + for (TInt i = 0; i < count; i++) + { + switch (aArgs[i].iElement) + { + case EDpsArgPrintServiceAvailable: + converter.Assign(aArgs[i].iContent); + TInt64 result; + error = converter.Val(result, EHex); + if (error != KErrNone) + { + IF_DEBUG(Print(_L("*** convert error"))); + return error; + } + // removes the low four bytes zeros. + IF_DEBUG(Print(_L("--Printer available is %x"), result)); + result = result >> KShiftLength; + iRepParam.iPrintAvailable = result; + break; + + case EDpsArgDpsVersions: + TDpsVersion version; + + parser.Assign(aArgs[i].iContent); + while (!parser.Eos()) + { + parser.Mark(); + parser.SkipCharacters(); + if (parser.TokenLength()) + { + TPtrC8 token = parser.MarkedToken(); + converter.Assign(token); + parser.SkipSpace(); + } + else + { + IF_DEBUG(Print(_L("***wrong !!!"))); + return KErrArgument; + } + error = aTrader->ConvertVersion(converter, version); + if (error != KErrNone) + { + return error; + } + error = iRepParam.iDpsVersions.Append(version); + if (error != KErrNone) + { + IF_DEBUG(Print(_L("*** append error"))); + return error; + } + } + break; + + case EDpsArgVendorName: + iRepParam.iVendorName.Copy(aArgs[i].iContent); + IF_DEBUG(Print(_L + ("vendor name is %S"), &iRepParam.iVendorName)); + break; + + case EDpsArgVendorSpecificVersion: + parser.Assign(aArgs[i].iContent); + aTrader->ConvertVersion(parser, version); + iRepParam.iVendorVersion = version; + IF_DEBUG(Print(_L + ("vendor version is %x"), iRepParam.iVendorVersion)); + break; + + case EDpsArgProductName: + iRepParam.iProductName.Copy(aArgs[i].iContent); + IF_DEBUG(Print(_L + ("product name is %S"), &iRepParam.iProductName)); + break; + + case EDpsArgSerialNo: + iRepParam.iSerialNo.Copy(aArgs[i].iContent); + IF_DEBUG(Print(_L("SerialNo is %S"), &iRepParam.iSerialNo)); + break; + + default: + IF_DEBUG(Print(_L("--Unknown param!!"))); + return KErrArgument; + } + } + + IF_DEBUG(Print(_L("<<>>TDpsGetJobStatus::FillRepArgs"))); + TInt value, error, per; + TBuf fileName; + TLex8 converter; + TInt count = aArgs.Count(); + TBool reply = aTrader->IsReply(); + if (!reply) + { + aTrader->Engine()->Event()->iEvent = EDpsEvtNotifyJobStatus; + } + else + { + aTrader->Engine()->Event()->iEvent = EDpsEvtEmpty; + } + for (TInt i = 0; i < count; i++) + { + switch (aArgs[i].iElement) + { + case EDpsArgPrtPID: + converter.Assign(aArgs[i].iContent); + error = converter.Val(value); + if (error != KErrNone) + { + return error; + } + if (reply) + { + iRepParam.iPrtPID = value; + } + else + { + aTrader->Engine()->Event()->iJobEvent.iRepParam.iPrtPID = + value; + } + break; + + case EDpsArgFilePath: + if (reply) + { + iRepParam.iFilePath.Copy(aArgs[i].iContent); + } + else + { + aTrader->Engine()->Event()->iJobEvent.iRepParam.iFilePath. + Copy(aArgs[i].iContent); + } + break; + + case EDpsArgCopyID: + converter.Assign(aArgs[i].iContent); + error = converter.Val(value); + if (error != KErrNone) + { + return error; + } + if (reply) + { + iRepParam.iCopyID = value; + } + else + { + aTrader->Engine()->Event()->iJobEvent.iRepParam.iCopyID = + value; + } + break; + + case EDpsArgProgress: + per = aTrader->ParsePercentage(aArgs[i].iContent); + if (per < KErrNone) + { + return per; + } + + if (reply) + { + iRepParam.iProgress = per; + } + else + { + aTrader->Engine()->Event()->iJobEvent.iRepParam.iProgress = + per; + } + break; + + case EDpsArgImagesPrinted: + converter.Assign(aArgs[i].iContent); + error = converter.Val(value); + if (error != KErrNone) + { + return error; + } + if (reply) + { + iRepParam.iImagesPrinted = value; + } + else + { + aTrader->Engine()->Event()->iJobEvent.iRepParam. + iImagesPrinted = value; + } + break; + + default: + IF_DEBUG(Print(_L("***wrong param!!!"))); + return KErrArgument; + } + } + IF_DEBUG(Print(_L("<<>>TDpsGetPrinterStatus::FillRepArgs"))); + // if UI has not pass the event pointer, we do need to fill in it + if (!aTrader->Engine()->Event()) + { + return KErrNone; + } + TLex8 converter; + TDpsPrinterStatusRep param; + const TInt count = aArgs.Count(); + TUint32 value, temp; + TBool reply = aTrader->IsReply(); + if (!reply) + { + aTrader->Engine()->Event()->iEvent = EDpsEvtNotifyDeviceStatus; + } + else + { + aTrader->Engine()->Event()->iEvent = EDpsEvtEmpty; + } + for (TInt i = 0; i < count; i++) + { + converter.Assign(aArgs[i].iContent); + TInt error = converter.Val(value, EHex); + if (error != KErrNone) + { + return error; + } + IF_DEBUG(Print(_L("--the value is %x"), value)); + + switch (aArgs[i].iElement) + { + case EDpsArgDpsPrintServiceStatus: + value = value >> KShiftLength; + if (EDpsPrintServiceStatusPrinting == value || + EDpsPrintServiceStatusIdle == value || + EDpsPrintServiceStatusPaused == value) + { + if (reply) + { + iRepParam.iPrintStatus = + (TDpsPrintServiceStatus)(value); + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iPrintStatus = (TDpsPrintServiceStatus)(value); + } + } + else + { + return KErrArgument; + } + + break; + + case EDpsArgJobEndReason: + value = value >> KShiftLength; + if (EDpsJobStatusNotEnded == value || + EDpsJobStatusEndedOk == value || + EDpsJobStatusEndedAbortImmediately == value || + EDpsJobStatusEndedAbortCompleteCurrent == value || + EDpsJobStatusEndedOther == value) + { + if (reply) + { + iRepParam.iJobStatus = (TDpsJobStatus)(value); + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iJobStatus = (TDpsJobStatus)(value); + } + } + else + { + return KErrArgument; + } + + break; + + case EDpsArgErrorStatus: + value = value >> KShiftLength; + if (EDpsErrorStatusOk == value || + EDpsErrorStatusWarning == value || + EDpsErrorStatusFatal == value) + { + if (reply) + { + iRepParam.iErrorStatus = (TDpsErrorStatus)(value); + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iErrorStatus = (TDpsErrorStatus)(value); + } + } + else + { + return KErrArgument; + } + + break; + + case EDpsArgErrorReason: + temp = value >> KShiftLength; + if (EDpsJobErrorNone == temp || + EDpsJobErrorPaper == temp || + EDpsJobErrorInk == temp || + EDpsJobErrorHardware == temp || + EDpsJobErrorFile == temp) + { + param.iJobEndReason.iMajor = + (TDpsJobEndReasonMajor)(temp); + IF_DEBUG(Print(_L("the end reason is %x"), temp)); + value = value & KDpsMinorMask; + switch (param.iJobEndReason.iMajor) + { + case EDpsJobErrorPaper: + param.iJobEndReason.iPaperMinor = + (TDpsJobEndReasonPaper)(value); + break; + + case EDpsJobErrorInk: + param.iJobEndReason.iInkMinor = + (TDpsJobEndReasonInk)(value); + break; + + case EDpsJobErrorHardware: + param.iJobEndReason.iHardMinor = + (TDpsJobEndReasonHard)(value); + break; + + case EDpsJobErrorFile: + param.iJobEndReason.iFileMinor = + (TDpsJobEndReasonFile)(value); + break; + + default: + IF_DEBUG(Print(_L("no minor error"))); + break; + } + if (reply) + { + iRepParam.iJobEndReason = param.iJobEndReason; + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iJobEndReason = param.iJobEndReason; + } + } + else + { + return KErrArgument; + } + + break; + + case EDpsArgDisconnectEnable: + value = value >> KShiftLength; + if (EDpsDisconnectEnableFalse == value) + { + param.iDisconnectEnable = EFalse; + } + else if (EDpsDisconnectEnableTrue == value) + { + param.iDisconnectEnable = ETrue; + } + else + { + return KErrArgument; + } + if (reply) + { + iRepParam.iDisconnectEnable = param.iDisconnectEnable; + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iDisconnectEnable = param.iDisconnectEnable; + } + break; + + case EDpsArgCapabilityChanged: + value = value >> KShiftLength; + if (EDpsCapabilityChangedFalse == value) + { + param.iCapabilityChange = EFalse; + } + else if (EDpsCapabilityChangedTrue == value) + { + param.iCapabilityChange = ETrue; + } + else + { + return KErrArgument; + } + if (reply) + { + iRepParam.iCapabilityChange = param.iCapabilityChange; + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iCapabilityChange = param.iCapabilityChange; + } + break; + + case EDpsArgNewJobOk: + value = value >> KShiftLength; + if (EDpsNewJobOkTrue == value) + { + param.iNewJobOk = ETrue; + } + else if (EDpsNewJobOkFalse == value) + { + param.iNewJobOk = EFalse; + } + else + { + return KErrArgument; + } + if (reply) + { + iRepParam.iNewJobOk = param.iNewJobOk; + } + else + { + aTrader->Engine()->Event()->iPrinterEvent.iRepParam. + iNewJobOk = param.iNewJobOk; + } + break; + + default: + IF_DEBUG(Print(_L("***wrong param"))); + return KErrArgument; + } + } + + IF_DEBUG(Print(_L("<<