From above at beginning, you had:
scts2.sc_numts = 2;
scts2.sc_tsarrayp = &ts2;
if ( ipm_GetXmitSlot(voice[index_voice2].deviceInfo[IPM].devH, &scts2, EV_ASYNC) < 0 ) {
The line should be:
scts2.sc_numts = 1;
You are not passing two timeslots in this case. Its only 1.
So after you get both events for the get xmit slot info, you can call the ipm_listen in async mode on each channel passing the opposing channel timeslot information. I see you were caling them in sync in this case.
Then make sure you call ipm_startmedia afterwards to initialize the RTP stream for each channel when the call is answered.
Jeff