📄 udip2soc.c
字号:
UDICount count; /* in -- count of objects to be transferred */UDISizeT size; /* in -- size of each object */UDICount *count_done; /* out - count actually transferred */UDIBool direction; /* in -- high-to-low or reverse */{ UDIInt32 service_id = UDICopy_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_UDIResource(udrs, &from); udr_UDIResource(udrs, &to); udr_UDICount(udrs, &count); udr_UDISizeT(udrs, &size); udr_UDIBool(udrs, &direction); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDICount(udrs, count_done); udr_UDIError(udrs, &dfe_errno); /* get any TIP error */ return dfe_errno;}/***************************************************************** UDI_EXECUTE* UDIExecute() continues execution of the default* process from the current PC.*/UDIError UDIExecute(){ UDIInt32 service_id = UDIExecute_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDIError(udrs, &dfe_errno); /* get any TIP error */ return dfe_errno;}/******************************************************************** UDI_STEP* UDIStep() specifies a number of "instruction"* steps to make.*/UDIError UDIStep(steps, steptype, range)UDIUInt32 steps; /* in -- number of steps */UDIStepType steptype; /* in -- type of stepping to be done */UDIRange range; /* in -- range if StepInRange is TRUE */{ UDIInt32 service_id = UDIStep_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_UDIInt32(udrs, &steps); udr_UDIStepType(udrs, &steptype); udr_UDIRange(udrs, &range); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDIError(udrs, &dfe_errno); /* get any TIP error */ return dfe_errno;}/******************************************************************** UDI_STOP* UDIStop() stops the default process*/UDIVoid UDIStop(){ if(!strcmp(session[current].soc_con_p->domain_string, "AF_UNIX")) kill(session[current].soc_con_p->tip_pid, SIGUSR1); else udr_signal(udrs); return;}/******************************************************************** UDI_WAIT* UDIWait() returns the state of the target procesor.*/UDIError UDIWait(maxtime, pid, stop_reason)UDIInt32 maxtime; /* in -- maximum time to wait for completion */UDIPId *pid; /* out -- pid of process which stopped if any */UDIUInt32 *stop_reason; /* out -- PC where process stopped */{ UDIInt32 service_id = UDIWait_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_UDIInt32(udrs, &maxtime); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDIPId(udrs, pid); udr_UDIUInt32(udrs, stop_reason); udr_UDIError(udrs, &dfe_errno); /* get any TIP error */ return dfe_errno;}/********************************************************** UDI_SET_BREAKPOINT* UDISetBreakpoint() sets a breakpoint at an adress* and uses the passcount to state how many* times that instruction should be hit before the* break occurs.*/UDIError UDISetBreakpoint (addr, passcount, type, break_id)UDIResource addr; /* in -- where breakpoint gets set */UDIInt32 passcount; /* in -- passcount for breakpoint */UDIBreakType type; /* in -- breakpoint type */UDIBreakId *break_id; /* out - assigned break id */{ UDIInt32 service_id = UDISetBreakpoint_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_UDIResource(udrs, &addr); udr_UDIInt32(udrs, &passcount); udr_UDIBreakType(udrs, &type); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDIBreakId(udrs, break_id); udr_UDIError(udrs, &dfe_errno); /* get any TIP error */ return dfe_errno;}/******************************************************** UDI_QUERY_BREAKPOINT*/UDIError UDIQueryBreakpoint (break_id, addr, passcount, type, current_count)UDIBreakId break_id; /* in -- assigned break id */UDIResource *addr; /* out - where breakpoint was set */UDIInt32 *passcount; /* out - trigger passcount for breakpoint */UDIBreakType *type; /* out - breakpoint type */UDIInt32 *current_count; /* out - current count for breakpoint */{ UDIInt32 service_id = UDIQueryBreakpoint_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_UDIBreakId(udrs, &break_id); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDIResource(udrs, addr); udr_UDIInt32(udrs, passcount); udr_UDIBreakType(udrs, type); udr_UDIInt32(udrs, current_count); udr_UDIError(udrs, &dfe_errno); /* get any TIP error */ return dfe_errno;}/******************************************************** UDI_CLEAR_BREAKPOINT* UDIClearBreakpoint() is used to clear a breakpoint.*/UDIError UDIClearBreakpoint (break_id)UDIBreakId break_id; /* in -- assigned break id */{ UDIInt32 service_id = UDIClearBreakpoint_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_UDIBreakId(udrs, &break_id); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDIError(udrs, &dfe_errno); /* get any TIP error */ return dfe_errno;}/************************************************************** UDI_GET_STDOUT* UDIGetStdout() is called when a call to* UDIWait() indicates there is STD output data ready. */UDIError UDIGetStdout(buf, bufsize, count_done)UDIHostMemPtr buf; /* out -- buffer to be filled */UDISizeT bufsize; /* in -- buffer size in bytes */UDISizeT *count_done; /* out -- number of bytes written to buf */{ UDIInt32 service_id = UDIGetStdout_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_UDISizeT(udrs, &bufsize); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDISizeT(udrs, count_done); udr_bytes(udrs, buf, *count_done); udr_UDIError(udrs, &dfe_errno); /* get any TIP error */ return dfe_errno;}/************************************************************** UDI_GET_STDERR* UDIGetStderr() is called when a call to* UDIWait() indicates there is STDERR output data ready*/UDIError UDIGetStderr(buf, bufsize, count_done)UDIHostMemPtr buf; /* out -- buffer to be filled */UDISizeT bufsize; /* in -- buffer size in bytes */UDISizeT *count_done; /* out -- number of bytes written to buf */{ UDIInt32 service_id = UDIGetStderr_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_UDISizeT(udrs, &bufsize); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDISizeT(udrs, count_done); udr_bytes(udrs, buf, *count_done); udr_UDIError(udrs, &dfe_errno); /* get any TIP error */ return dfe_errno;}/*************************************************************** UDI_PUT_STDIN* UDIPutStdin() is called whenever the DFE wants to* deliver an input character to the TIP.*/UDIError UDIPutStdin (buf, count, count_done)UDIHostMemPtr buf; /* in -- buffer to be filled */UDISizeT count; /* in -- buffer size in bytes */UDISizeT *count_done; /* out - number of bytes written to buf */{ UDIInt32 service_id = UDIPutStdin_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_UDISizeT(udrs, &count); udr_bytes(udrs, buf, count); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDISizeT(udrs, count_done); udr_UDIError(udrs, &dfe_errno); /* get any TIP error */ return dfe_errno;}/************************************************************** UDI_STDIN_MODE* UDIStdinMode() is used to change the mode that chazcters* are fetched from the user.*/UDIError UDIStdinMode(mode)UDIMode *mode; /* out - */{ UDIInt32 service_id = UDIStdinMode_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDIMode(udrs, mode); udr_UDIError(udrs, &dfe_errno); /* get any TIP error */ return dfe_errno;}/*************************************************************** UDI_PUT_TRANS* UDIPutTrans() is used to feed input to the passthru mode.*/UDIError UDIPutTrans (buf, count, count_done)UDIHostMemPtr buf; /* in -- buffer address containing input data */UDISizeT count; /* in -- number of bytes in buf */UDISizeT *count_done; /* out-- number of bytes transfered */{ UDIInt32 service_id = UDIPutTrans_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_UDISizeT(udrs, &count); udr_bytes(udrs, buf, count); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDISizeT(udrs, count_done); udr_UDIError(udrs, &dfe_errno); /* get any TIP error */ return dfe_errno;}/*************************************************************** UDI_GET_TRANS* UDIGetTrans() is used to get output lines from the* passthru mode.*/UDIError UDIGetTrans (buf, bufsize, count_done)UDIHostMemPtr buf; /* out -- buffer to be filled */UDISizeT bufsize; /* in -- size of buf */UDISizeT *count_done; /* out -- number of bytes in buf */{ UDIInt32 service_id = UDIGetTrans_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_UDISizeT(udrs, &bufsize); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDISizeT(udrs, count_done); udr_bytes(udrs, buf, *count_done); udr_UDIError(udrs, &dfe_errno); /* get any TIP error */ return dfe_errno;}/************************************************************** UDI_Trans_Mode* UDITransMode() is used to change the mode that the* transparent routines operate in.*/UDIError UDITransMode(mode)UDIMode *mode; /* out -- selected mode */{ UDIInt32 service_id = UDITransMode_c; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); udr_UDIMode(udrs, mode); udr_sendnow(udrs); if(udr_errno) return udr_errno; udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ udr_UDIError(udrs, &dfe_errno); return dfe_errno;}/******************************************************************** UDI_TEST*/UDIError UDITest( cnt, str_p, array)UDISizeT cnt;UDIHostMemPtr str_p;UDIInt32 array[];{ UDIInt32 service_id = UDITest_c; UDIInt16 scnt = cnt; UDISizeT r_cnt; char buf[256]; udr_errno = 0; udrs->udr_op = UDR_ENCODE; /* send all "in" parameters */ udr_UDIInt32(udrs, &service_id); printf("send cnt=%d scnt=%d\n", cnt, scnt); udr_UDISizeT(udrs, &cnt); udr_UDIInt16(udrs, &scnt); printf(" array[0]=0x%x array[1]=0x%x array[2]=0x%x array[3]=0x%x\n", array[0], array[1], array[2], array[3]); udr_bytes(udrs, (char*)array, 4*sizeof(UDIInt32)); printf(" string=%s\n", str_p); udr_string(udrs, str_p); udr_sendnow(udrs); if(udr_errno) { fprintf(stderr, " DFE-ipc Send ERROR\n"); return udr_errno; } udrs->udr_op = UDR_DECODE; /* receive all "out" parameters */ printf("recv "); udr_UDISizeT(udrs, &r_cnt); udr_UDIInt16(udrs, &scnt); printf(" rcnt=%d scnt=%d\n", r_cnt, scnt); udr_bytes(udrs, (char*)array, 4*sizeof(UDIInt32)); printf(" array[0]=0x%x array[1]=0x%x array[2]=0x%x array[3]=0x%x\n", array[0], array[1], array[2], array[3]); udr_string(udrs, str_p); printf(" string=%s\n", str_p); udr_UDIError(udrs, &dfe_errno); return dfe_errno;}UDIUInt32 UDIGetDFEIPCId(){ return ((company_c << 16) + (product_c << 12) + version_c);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -