I run this code on a real 7650. It answers incoming calls, but i can't get the other partys number.
I thought this was fixed in this epoc-release. (using sdk 0.9)

// magnus persson

#include "Test.h"
#include "logview.h"
#include "logcli.h"

_LIT(KFName, "C:\\debug.txt"
void Test::debugline(const char *a, void *arg1, void *arg2, void *arg3) {
RFs iFs;
RFile fp;
TBuf8<1024> buf;

iFs.Connect();
if(!fp.Open(iFs, KFName, EFileShareAny|EFileWrite)) {
TInt spos = 0;
fp.Seek(ESeekEnd, spos);
} else fp.Replace(iFs, KFName, EFileShareAny|EFileWrite);
TPtrC8 p((const unsigned char *)a);
buf.Format(p, arg1, arg2, arg3);
//buf.Append('\n');
fp.Write(buf);
fp.Close();
iFs.Close();
for(int i=0;i<buf.Length();i++) {
_LIT(form, "%c"
console->Printf(form,buf[i]);
}
}

void Test::init(void) {
RFs iFs;
iFs.Connect();
iFs.Delete(KFName);
}

void Test::debug(const char *a) {
debugline(a,0,0,0);
}
void Test::debug(const char *a,void *b) {
debugline(a,b,0,0);
}
void Test::debug(const char *a,void *b,void *c) {
debugline(a,b,c,0);
}
void Test::debug(const char *a,void *b,void *c,void *d) {
debugline(a,b,c,d);
}
void Test::debugname(TDes &name) {
for(int i=0;i<name.Length();i++) {
debug("%c",(void*)name[i]);
}
}
Test::Test(CConsoleBase *con) : CActive(0) {
console=con;
init();

RTelServer ts;
debug("connect\n"
ts.Connect();

RTelServer::TPhoneInfo pinfo;
debug("get info\n"
ts.GetPhoneInfo(0,pinfo);
debug("info:" debugname(pinfo.iName); debug("\n"

RPhone phone;
TInt nr;
phone.Open(ts,pinfo.iName);
phone.EnumerateLines(nr);
debug("nr:%d\n",(void*)nr);

RPhone::TLineInfo aLineInfo;
for(int i=0;i<nr;i++) {
phone.GetLineInfo(i,aLineInfo);
debug("cap:%d name:",(void*)aLineInfo.iLineCapsFlags); debugname(aLineInfo.iName); debug("\n"
}

phone.GetLineInfo(0,aLineInfo);
RLine line;
int ret=line.Open(phone,aLineInfo.iName);
//ret=line.Open(ts,info.iName);
debug("line opened ret:%d\n",(void*)ret);

TRequestStatus status=-1;
RCall::TStatus tstat=(RCall::TStatus)-1;
line.NotifyStatusChange(status,tstat);
RCall call;
for(int i=0;i<50;i++) {
debug("loop:%d\n",(void*)i);
RLine::TLineInfo tinfo;
// info.iNameOfCallForAnswering[0]=0;
//{ debug("stat:%d %d\n" console->Printf(str,tinfo.iStatus,tinfo.iHookStatus); }
debug("stat:%x stat:%d \n",(void*)status.Int(),(void*)tstat);
if(tstat==3 ) {
ret=line.GetInfo(tinfo);
if(ret != 0) {
debug("Error: get info ret:%d\n",(void*)ret);
return;
}
debug("calling open call:"
debugname(tinfo.iNameOfCallForAnswering);
//debug(" last:"
debugname(tinfo.iNameOfLastCallAdded);
debug("\n"
ret=call.OpenExistingCall(line,tinfo.iNameOfCallForAnswering);
if(ret != 0) {
debug("Error: OpenExistingCall ret:%d\n",(void*)ret);
return;
}
for(int j=0;j<50;j++) {
debug("j:%d\n",(void*)j);
RCall::TOwnershipStatus owner;
call.GetOwnershipStatus(owner);
debug("owner:%d\n",(void*)owner);
RCall::TStatus st;
call.GetStatus(st);
debug("status of call: "
if(st==RCall::EStatusRinging) {
debug("ringing, answering\n"
TRequestStatus req;
call.AcquireOwnership(req);
if(req != 0) debug("Error: aquire1:%d\n",(void*)req.Int());
ret=call.AnswerIncomingCall();
if(ret != 0) debug("Error: answer\n"
ret=call.TransferOwnership();
if(ret != 0) debug("Error: transfer ownership\n"
} else
if(st==RCall::EStatusRinging) debug("status:ringing\n" else
if(st==RCall::EStatusAnswering) debug("status:answering\n" else
if(st==RCall::EStatusIdle) debug("status:idle\n" else
if(st==RCall::EStatusConnecting) debug("status:connecting\n" else
if(st==RCall::EStatusConnected) debug("status:connected\n" else
if(st==RCall::EStatusIdle) debug("status:idle\n" else
debug("Error unknown status:%d\n",(void*)st);
if(owner==RCall::EOwnershipOwnedByAnotherClient) {
debug("owned by another, taking ownership\n"
TRequestStatus req;
call.AcquireOwnership(req);
if(req != 0) debug("Error: aquire2:%d\n",(void*)req.Int());
}

RCall::TCallInfo callinfo;
ret=call.GetInfo(callinfo);
if(ret != 0) {
debug("Error: getcallinfo ret:%d\n",(void*)ret);
return;
}
debug("callname:" debugname(callinfo.iCallName);
debug(" line:" debugname(callinfo.iLineName);
debug(" duration:%d %d %d\n",(void*)callinfo.iDuration.Int(),(void*)callinfo.iLineName.Length(),(void*)callinfo.iCallName.Length() );
RPhone::TLineInfo aLineInfo; // last try...
for(int i=0;i<nr;i++) {
phone.GetLineInfo(i,aLineInfo);
debug("name:" debugname(aLineInfo.iName); debug("\n"
}
delay(100000);
}
call.Close();
return;
}
delay(1500000);
}
void Test::delay(int n) {
RTimer timer;
TRequestStatus timerStatus;
timer.CreateLocal();
timer.After(timerStatus,n);
User::WaitForRequest(timerStatus);
}

and test.h:
class Test : public CActive {
TRequestStatus stat;
CLogClient *cl;
CLogViewRecent *view;
TBool bret;
CConsoleBase* console; // console object
RFs fsSession;
public:
Test(CConsoleBase *con);
void debugline(const char *a, void *arg1, void *arg2, void *arg3);
void debug(const char *a);
void debug(const char *a,void *b);
void debug(const char *a,void *b,void *c);
void debug(const char *a,void *b,void *c,void *d);
void debugname(TDes &name);
void init(void);
void delay(int t);
};