30 #include <sys/_tz_structs.h>
36 #define CD_SERVER_SCMD 0x80000593
39 CD_SCMD_READCLOCK = 0x01,
44 CD_SCMD_READ_ILINK_ID,
45 CD_SCMD_WRITE_ILINK_ID,
56 CD_SCMD_READ_CONSOLE_ID,
57 CD_SCMD_WRITE_CONSOLE_ID,
58 CD_SCMD_READ_MECHACON_VERSION,
63 CD_SCMD_AUTO_ADJUST_CTRL,
64 CD_SCMD_READ_MODEL_NAME,
65 CD_SCMD_WRITE_MODEL_NAME,
69 CD_SCMD_CANCELPOWEROFF,
90 #ifdef F__scmd_internals
100 int CdConfigRdWrNumBlocks;
103 extern int initVersionCdvdman;
105 extern int sCmdSemaId;
106 extern u8 sCmdRecvBuff[];
110 extern int CdConfigRdWrNumBlocks;
114 int _CdCheckSCmd(
int cmd);
118 #ifdef F_sceCdReadClock
121 if (_CdCheckSCmd(CD_SCMD_READCLOCK) == 0)
125 printf(
"Libcdvd call Clock read 1\n");
127 if (sceSifCallRpc(&clientSCmd, CD_SCMD_READCLOCK, 0, NULL, 0, sCmdRecvBuff, 16, NULL, NULL) < 0) {
128 SignalSema(sCmdSemaId);
132 memcpy(clock, UNCACHED_SEG(sCmdRecvBuff + 4), 8);
135 printf(
"Libcdvd call Clock read 2\n");
137 SignalSema(sCmdSemaId);
138 return *(
int *)UNCACHED_SEG(sCmdRecvBuff);
149 time_t ps2time(time_t *t)
160 convertfrombcd(&ps2tim);
162 printf(
"ps2time: %d-%d-%d %d:%d:%d\n",
170 tim.tm_sec = ps2tim.
second;
171 tim.tm_min = ps2tim.
minute;
172 tim.tm_hour = ps2tim.
hour;
173 tim.tm_mday = ps2tim.
day;
174 tim.tm_mon = ps2tim.
month - 1;
175 tim.tm_year = ps2tim.
year + 100;
180 offset_save = tz->__tzrule[0].offset;
181 tz->__tzrule[0].offset = -9 * 60 * 60;
185 tz->__tzrule[0].offset = offset_save;
194 #ifdef F_sceCdWriteClock
199 if (_CdCheckSCmd(CD_SCMD_WRITECLOCK) == 0)
202 memcpy(&sCmdSendBuff.clock, clock, 8);
204 if (sceSifCallRpc(&clientSCmd, CD_SCMD_WRITECLOCK, 0, &sCmdSendBuff, 8, sCmdRecvBuff, 16, NULL, NULL) < 0) {
205 SignalSema(sCmdSemaId);
209 memcpy(clock, UNCACHED_SEG(sCmdRecvBuff + 4), 8);
210 result = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
212 SignalSema(sCmdSemaId);
217 #ifdef F_sceCdGetDiskType
222 if (_CdCheckSCmd(CD_SCMD_GETDISKTYPE) == 0)
225 if (sceSifCallRpc(&clientSCmd, CD_SCMD_GETDISKTYPE, 0, NULL, 0, sCmdRecvBuff, 4, NULL, NULL) < 0) {
226 SignalSema(sCmdSemaId);
230 result = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
232 SignalSema(sCmdSemaId);
237 #ifdef F_sceCdGetError
242 if (_CdCheckSCmd(CD_SCMD_GETERROR) == 0)
245 if (sceSifCallRpc(&clientSCmd, CD_SCMD_GETERROR, 0, NULL, 0, sCmdRecvBuff, 4, NULL, NULL) < 0) {
246 SignalSema(sCmdSemaId);
250 result = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
252 SignalSema(sCmdSemaId);
257 #ifdef F_sceCdTrayReq
262 if (_CdCheckSCmd(CD_SCMD_TRAYREQ) == 0)
265 sCmdSendBuff.s32arg = param;
267 if (sceSifCallRpc(&clientSCmd, CD_SCMD_TRAYREQ, 0, &sCmdSendBuff, 4, sCmdRecvBuff, 8, NULL, NULL) < 0) {
268 SignalSema(sCmdSemaId);
273 *traychk = *(u32 *)UNCACHED_SEG(sCmdRecvBuff + 4);
274 result = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
276 SignalSema(sCmdSemaId);
281 #ifdef F_sceCdApplySCmd
282 int sceCdApplySCmd(u8 cmdNum,
const void *inBuff, u16 inBuffSize,
void *outBuff)
284 if (_CdCheckSCmd(CD_SCMD_SCMD) == 0)
287 sCmdSendBuff.scmd.cmdNum = cmdNum;
288 sCmdSendBuff.scmd.inBuffSize = inBuffSize;
289 memset(sCmdSendBuff.scmd.inBuff, 0, 16);
291 memcpy(sCmdSendBuff.scmd.inBuff, inBuff, inBuffSize);
293 if (sceSifCallRpc(&clientSCmd, CD_SCMD_SCMD, 0, &sCmdSendBuff, 20, sCmdRecvBuff, 16, NULL, NULL) < 0) {
294 SignalSema(sCmdSemaId);
299 memcpy(outBuff, UNCACHED_SEG(sCmdRecvBuff), 16);
300 SignalSema(sCmdSemaId);
310 if (_CdCheckSCmd(CD_SCMD_STATUS) == 0)
313 if (sceSifCallRpc(&clientSCmd, CD_SCMD_STATUS, 0, NULL, 0, sCmdRecvBuff, 4, NULL, NULL) < 0) {
314 SignalSema(sCmdSemaId);
319 printf(
"status called\n");
320 result = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
322 SignalSema(sCmdSemaId);
332 if (_CdCheckSCmd(CD_SCMD_BREAK) == 0)
335 if (sceSifCallRpc(&clientSCmd, CD_SCMD_BREAK, 0, NULL, 0, sCmdRecvBuff, 4, NULL, NULL) < 0) {
336 SignalSema(sCmdSemaId);
339 result = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
341 SignalSema(sCmdSemaId);
346 #ifdef F_sceCdCancelPOffRdy
351 if (_CdCheckSCmd(CD_SCMD_CANCELPOWEROFF) == 0)
354 if (sceSifCallRpc(&clientSCmd, CD_SCMD_CANCELPOWEROFF, 0, NULL, 0, sCmdRecvBuff, 8, NULL, NULL) < 0) {
355 SignalSema(sCmdSemaId);
359 *result = *(u32 *)UNCACHED_SEG(sCmdRecvBuff + 4);
360 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
362 SignalSema(sCmdSemaId);
367 #ifdef F_sceCdBlueLedCtrl
368 int sceCdBlueLedCtrl(u8 control, u32 *result)
372 if (_CdCheckSCmd(CD_SCMD_BLUELEDCTRL) == 0)
375 sCmdSendBuff.u32arg = control;
376 if (sceSifCallRpc(&clientSCmd, CD_SCMD_BLUELEDCTRL, 0, &sCmdSendBuff, 4, sCmdRecvBuff, 8, NULL, NULL) < 0) {
377 SignalSema(sCmdSemaId);
381 *result = *(u32 *)UNCACHED_SEG(sCmdRecvBuff + 4);
382 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
384 SignalSema(sCmdSemaId);
389 #ifdef F_sceCdPowerOff
394 if (_CdCheckSCmd(CD_SCMD_POWEROFF) == 0)
397 if (sceSifCallRpc(&clientSCmd, CD_SCMD_POWEROFF, 0, NULL, 0, sCmdRecvBuff, 8, NULL, NULL) < 0) {
398 SignalSema(sCmdSemaId);
402 *result = *(u32 *)UNCACHED_SEG(sCmdRecvBuff + 4);
403 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
405 SignalSema(sCmdSemaId);
415 if (_CdCheckSCmd(CD_SCMD_MMODE) == 0)
418 sCmdSendBuff.s32arg = media;
419 if (sceSifCallRpc(&clientSCmd, CD_SCMD_MMODE, 0, &sCmdSendBuff, 4, sCmdRecvBuff, 4, NULL, NULL) < 0) {
420 SignalSema(sCmdSemaId);
424 result = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
426 SignalSema(sCmdSemaId);
431 #ifdef F_sceCdChangeThreadPriority
436 if (_CdCheckSCmd(CD_SCMD_SETTHREADPRI) == 0)
439 sCmdSendBuff.s32arg = priority;
440 if (sceSifCallRpc(&clientSCmd, CD_SCMD_SETTHREADPRI, 0, &sCmdSendBuff, 4, sCmdRecvBuff, 4, NULL, NULL) < 0) {
441 SignalSema(sCmdSemaId);
445 result = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
447 SignalSema(sCmdSemaId);
452 #ifdef F__CdCheckSCmd
453 int _CdCheckSCmd(
int cur_cmd)
456 if (PollSema(sCmdSemaId) != sCmdSemaId) {
458 printf(
"Scmd fail sema cur_cmd:%d keep_cmd:%d\n", cur_cmd, sCmdNum);
462 ReferThreadStatus(CdThreadId, &CdThreadParam);
464 SignalSema(sCmdSemaId);
470 memset(&clientSCmd, 0,
sizeof(clientSCmd));
471 if (clientSCmd.server)
476 printf(
"Libcdvd bind err S cmd\n");
478 if (clientSCmd.server != 0)
487 #ifdef F_sceCdForbidRead
492 if (_CdCheckSCmd(CD_SCMD_FORBID_READ) == 0)
494 if (sceSifCallRpc(&clientSCmd, CD_SCMD_FORBID_READ, 0, NULL, 0, sCmdRecvBuff, 8, NULL, NULL) >= 0) {
495 *status = ((u32 *)UNCACHED_SEG(sCmdRecvBuff))[1];
496 result = ((
int *)UNCACHED_SEG(sCmdRecvBuff))[0];
500 SignalSema(sCmdSemaId);
505 #ifdef F_sceCdSpinCtrlEE
510 if (_CdCheckSCmd(CD_SCMD_SPIN_CTRL) == 0)
512 sCmdSendBuff.u32arg = speed;
513 if (sceSifCallRpc(&clientSCmd, CD_SCMD_SPIN_CTRL, 0, &sCmdSendBuff, 4, sCmdRecvBuff, 8, NULL, NULL) >= 0) {
514 result = ((
int *)UNCACHED_SEG(sCmdRecvBuff))[0];
518 SignalSema(sCmdSemaId);
523 #ifdef F_sceCdBootCertify
528 if (_CdCheckSCmd(CD_SCMD_BOOT_CERTIFY) == 0)
531 memcpy(sCmdSendBuff.bcertify, romname, 4);
532 if (sceSifCallRpc(&clientSCmd, CD_SCMD_BOOT_CERTIFY, 0, &sCmdSendBuff, 4, sCmdRecvBuff, 4, NULL, NULL) >= 0) {
533 result = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
538 SignalSema(sCmdSemaId);
543 #ifdef F_sceCdReadSUBQ
548 if (_CdCheckSCmd(CD_SCMD_READ_SUBQ) == 0)
551 if (sceSifCallRpc(&clientSCmd, CD_SCMD_READ_SUBQ, 0, NULL, 0, sCmdRecvBuff, 0x12, NULL, NULL) >= 0) {
552 memcpy(buffer, UNCACHED_SEG(&sCmdRecvBuff[8]), 0x12);
553 *status = *(u32 *)UNCACHED_SEG(&sCmdRecvBuff[4]);
554 result = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
559 SignalSema(sCmdSemaId);
564 #ifdef F_sceCdForbidDVDP
569 if (_CdCheckSCmd(CD_SCMD_FORBID_DVDP) == 0)
572 if (sceSifCallRpc(&clientSCmd, CD_SCMD_FORBID_DVDP, 0, NULL, 0, sCmdRecvBuff, 8, NULL, NULL) >= 0) {
573 *result = ((u32 *)UNCACHED_SEG(sCmdRecvBuff))[1];
574 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
579 SignalSema(sCmdSemaId);
584 #ifdef F_sceCdAutoAdjustCtrl
589 if (_CdCheckSCmd(CD_SCMD_AUTO_ADJUST_CTRL) == 0)
592 sCmdSendBuff.s32arg = mode;
593 if (sceSifCallRpc(&clientSCmd, CD_SCMD_AUTO_ADJUST_CTRL, 0, &sCmdSendBuff, 4, sCmdRecvBuff, 8, NULL, NULL) >= 0) {
594 *result = ((u32 *)UNCACHED_SEG(sCmdRecvBuff))[1];
595 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
600 SignalSema(sCmdSemaId);
606 int sceCdDecSet(
unsigned char arg1,
unsigned char arg2,
unsigned char shift)
610 if (_CdCheckSCmd(CD_SCMD_DEC_SET) == 0)
613 sCmdSendBuff.decSet.arg1 = arg1;
614 sCmdSendBuff.decSet.arg2 = arg2;
615 sCmdSendBuff.decSet.shift = shift;
617 if (sceSifCallRpc(&clientSCmd, CD_SCMD_DEC_SET, 0, &sCmdSendBuff, 4, sCmdRecvBuff, 16, NULL, NULL) >= 0) {
618 result = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
623 SignalSema(sCmdSemaId);
628 #ifdef F_sceCdSetHDMode
633 if (_CdCheckSCmd(CD_SCMD_SET_HD_MODE) == 0)
635 sCmdSendBuff.u32arg = mode;
636 if (sceSifCallRpc(&clientSCmd, CD_SCMD_SET_HD_MODE, 0, &sCmdSendBuff, 4, sCmdRecvBuff, 4, NULL, NULL) >= 0) {
637 result = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
641 SignalSema(sCmdSemaId);
646 #ifdef F_sceCdOpenConfig
651 if (NumBlocks < 0x45) {
652 if (_CdCheckSCmd(CD_SCMD_OPEN_CONFIG) == 0)
655 sCmdSendBuff.u32arg = ((NumBlocks & 0xFF) << 16) | (mode & 0xFF) | ((block & 0xFF) << 8);
656 CdConfigRdWrNumBlocks = NumBlocks;
657 if (sceSifCallRpc(&clientSCmd, CD_SCMD_OPEN_CONFIG, 0, &sCmdSendBuff, 4, sCmdRecvBuff, 8, NULL, NULL) >= 0) {
658 *status = ((u32 *)UNCACHED_SEG(sCmdRecvBuff))[1];
659 result = ((
int *)UNCACHED_SEG(sCmdRecvBuff))[0];
663 SignalSema(sCmdSemaId);
671 #ifdef F_sceCdCloseConfig
676 if (_CdCheckSCmd(CD_SCMD_CLOSE_CONFIG) == 0)
679 if (sceSifCallRpc(&clientSCmd, CD_SCMD_CLOSE_CONFIG, 0, NULL, 0, sCmdRecvBuff, 8, NULL, NULL) >= 0) {
680 *result = ((u32 *)UNCACHED_SEG(sCmdRecvBuff))[1];
681 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
686 SignalSema(sCmdSemaId);
691 #ifdef F_sceCdReadConfig
696 if (_CdCheckSCmd(CD_SCMD_READ_CONFIG) == 0)
699 if (sceSifCallRpc(&clientSCmd, CD_SCMD_READ_CONFIG, 0, NULL, 0, sCmdRecvBuff, 0x408, NULL, NULL) >= 0) {
700 *result = ((
int *)UNCACHED_SEG(sCmdRecvBuff))[1];
701 memcpy(buffer, &((u32 *)UNCACHED_SEG(sCmdRecvBuff))[2], (CdConfigRdWrNumBlocks << 4) - CdConfigRdWrNumBlocks);
702 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
707 SignalSema(sCmdSemaId);
712 #ifdef F_sceCdWriteConfig
717 if (_CdCheckSCmd(CD_SCMD_WRITE_CONFIG) == 0)
720 memcpy(sCmdSendBuff.data, buffer, (CdConfigRdWrNumBlocks << 4) - CdConfigRdWrNumBlocks);
721 if (sceSifCallRpc(&clientSCmd, CD_SCMD_WRITE_CONFIG, 0, &sCmdSendBuff, 0x400, sCmdRecvBuff, 8, NULL, NULL) >= 0) {
722 *result = ((
int *)UNCACHED_SEG(sCmdRecvBuff))[1];
723 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
728 SignalSema(sCmdSemaId);
734 #ifdef F_sceCdReadNVM
739 if (_CdCheckSCmd(CD_SCMD_READ_NVM) == 0)
742 sCmdSendBuff.nvm.address = address;
743 sCmdSendBuff.nvm.value = 0;
744 sCmdSendBuff.nvm.pad = 0;
746 if (sceSifCallRpc(&clientSCmd, CD_SCMD_READ_NVM, 0, &sCmdSendBuff, 8, sCmdRecvBuff, 0x10, NULL, NULL) >= 0) {
747 *data = *(
unsigned short int *)UNCACHED_SEG(&sCmdRecvBuff[8]);
748 *result = *(u8 *)UNCACHED_SEG(&sCmdRecvBuff[10]);
749 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
754 SignalSema(sCmdSemaId);
759 #ifdef F_sceCdWriteNVM
764 if (_CdCheckSCmd(CD_SCMD_WRITE_NVM) == 0)
767 sCmdSendBuff.nvm.address = address;
768 sCmdSendBuff.nvm.value = data;
769 sCmdSendBuff.nvm.pad = 0;
771 if (sceSifCallRpc(&clientSCmd, CD_SCMD_WRITE_NVM, 0, &sCmdSendBuff, 8, sCmdRecvBuff, 0x10, NULL, NULL) >= 0) {
772 *result = *(u8 *)UNCACHED_SEG(&sCmdRecvBuff[10]);
773 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
778 SignalSema(sCmdSemaId);
784 int sceCdRI(
unsigned char *buffer, u32 *result)
788 if (_CdCheckSCmd(CD_SCMD_READ_ILINK_ID) == 0)
791 if (sceSifCallRpc(&clientSCmd, CD_SCMD_READ_ILINK_ID, 0, NULL, 0, sCmdRecvBuff, 16, NULL, NULL) >= 0) {
792 memcpy(buffer, UNCACHED_SEG(&sCmdRecvBuff[8]), 8);
793 *result = *(u32 *)UNCACHED_SEG(&sCmdRecvBuff[4]);
794 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
799 SignalSema(sCmdSemaId);
805 int sceCdWI(
const unsigned char *buffer, u32 *status)
809 if (_CdCheckSCmd(CD_SCMD_WRITE_ILINK_ID) == 0)
812 memcpy(sCmdSendBuff.id, buffer, 8);
813 if (sceSifCallRpc(&clientSCmd, CD_SCMD_WRITE_ILINK_ID, 0, &sCmdSendBuff, 8, sCmdRecvBuff, 8, NULL, NULL) >= 0) {
814 *status = *(u32 *)UNCACHED_SEG(&sCmdRecvBuff[4]);
815 result = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
820 SignalSema(sCmdSemaId);
825 #ifdef F_sceCdReadConsoleID
830 if (_CdCheckSCmd(CD_SCMD_READ_CONSOLE_ID) == 0)
833 if (sceSifCallRpc(&clientSCmd, CD_SCMD_READ_CONSOLE_ID, 0, NULL, 0, sCmdRecvBuff, 16, NULL, NULL) >= 0) {
834 memcpy(buffer, UNCACHED_SEG(&sCmdRecvBuff[8]), 8);
835 *result = *(u32 *)UNCACHED_SEG(&sCmdRecvBuff[4]);
836 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
841 SignalSema(sCmdSemaId);
846 #ifdef F_sceCdWriteConsoleID
851 if (_CdCheckSCmd(CD_SCMD_WRITE_CONSOLE_ID) == 0)
854 memcpy(sCmdSendBuff.id, buffer, 8);
855 if (sceSifCallRpc(&clientSCmd, CD_SCMD_WRITE_CONSOLE_ID, 0, &sCmdSendBuff, 8, sCmdRecvBuff, 8, NULL, NULL) >= 0) {
856 *result = *(u32 *)UNCACHED_SEG(&sCmdRecvBuff[4]);
857 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
862 SignalSema(sCmdSemaId);
868 int sceCdMV(
unsigned char *buffer, u32 *result)
872 if (_CdCheckSCmd(CD_SCMD_READ_MECHACON_VERSION) == 0)
875 if (sceSifCallRpc(&clientSCmd, CD_SCMD_READ_MECHACON_VERSION, 0, NULL, 0, sCmdRecvBuff, 16, NULL, NULL) >= 0) {
877 memcpy(buffer, UNCACHED_SEG(&sCmdRecvBuff[8]), (initVersionCdvdman >= 0x200) ? 4 : 3);
878 *result = *(u32 *)UNCACHED_SEG(&sCmdRecvBuff[4]);
879 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
884 SignalSema(sCmdSemaId);
889 #ifdef F_sceCdCtrlADout
894 if (_CdCheckSCmd(CD_SCMD_CTRL_AD_OUT) == 0)
897 sCmdSendBuff.s32arg = arg1;
898 if (sceSifCallRpc(&clientSCmd, CD_SCMD_CTRL_AD_OUT, 0, &sCmdSendBuff, 4, sCmdRecvBuff, 8, NULL, NULL) >= 0) {
899 *result = *(u32 *)UNCACHED_SEG(&sCmdRecvBuff[4]);
900 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
905 SignalSema(sCmdSemaId);
911 int sceCdRM(
char *buffer, u32 *result)
915 if (_CdCheckSCmd(CD_SCMD_READ_MODEL_NAME) == 0)
918 if (sceSifCallRpc(&clientSCmd, CD_SCMD_READ_MODEL_NAME, 0, NULL, 0, sCmdRecvBuff, 0x18, NULL, NULL) >= 0) {
919 memcpy(buffer, UNCACHED_SEG(&sCmdRecvBuff[8]), 16);
920 *result = *(u32 *)UNCACHED_SEG(&sCmdRecvBuff[4]);
921 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
926 SignalSema(sCmdSemaId);
932 int sceCdWM(
const char *buffer, u32 *result)
936 if (_CdCheckSCmd(CD_SCMD_WRITE_MODEL_NAME) == 0)
939 memcpy(sCmdSendBuff.mname, buffer, 16);
940 if (sceSifCallRpc(&clientSCmd, CD_SCMD_WRITE_MODEL_NAME, 0, &sCmdSendBuff, 0x10, sCmdRecvBuff, 8, NULL, NULL) >= 0) {
941 *result = *(u32 *)UNCACHED_SEG(&sCmdRecvBuff[4]);
942 status = *(
int *)UNCACHED_SEG(sCmdRecvBuff);
947 SignalSema(sCmdSemaId);
952 #ifdef F_sceCdNoticeGameStart
966 *result = (u8)out[0];
974 int _CdSyncS(
int mode)
978 printf(
"S cmd wait\n");
979 while (sceSifCheckStatRpc(&clientSCmd))
984 return sceSifCheckStatRpc(&clientSCmd);