| 1849 | } |
| 1850 | |
| 1851 | static void processDownlinkAckNack(PDCHL1FEC *pdch,RLCMsgPacketDownlinkAckNack* rmsg,RadData &rd) |
| 1852 | { |
| 1853 | int tfi = rmsg->getTFI(); |
| 1854 | TBF *tbf = pdch->getTFITBF(tfi,RLCDir::Down); |
| 1855 | if (tbf) { |
| 1856 | MSInfo *ms = tbf->mtMS; |
| 1857 | ms->talkedUp(); |
| 1858 | ms->setRadData(rd); |
| 1859 | // Store the Channel Quality Report for reporting purposes. |
| 1860 | ms->msCValue.addPoint(rmsg->mCQR.mCValue); |
| 1861 | ms->msRXQual.addPoint(rmsg->mCQR.mRXQual); |
| 1862 | ms->msSigVar.addPoint(rmsg->mCQR.mSignVar); |
| 1863 | for (int tn = 0; tn < 8; tn++) { |
| 1864 | // Dont bother to differentiate this per timeslot. |
| 1865 | if (rmsg->mCQR.mHaveILevel[tn]) {ms->msILevel.addPoint(rmsg->mCQR.mILevel[tn]);} |
| 1866 | } |
| 1867 | |
| 1868 | tbf->engineRecvAckNack(rmsg); // process the ack/nack part of the msg. |
| 1869 | if (rmsg->mHaveChannelRequest) { // Process the channel request, if any. |
| 1870 | TBF *uptbf = TBF::newUpTBF(ms,rmsg->mCRD,ms->msTlli,false); |
| 1871 | |
| 1872 | if (uptbf) { |
| 1873 | GPRSLOG(1) <<"Uplink TBF from downlink AckNack" <<ms |
| 1874 | <<tbf <<" rlcmode=" <<tbf->mtUnAckMode |
| 1875 | <<" count tbfs=",ms->msCountActiveTBF(RLCDir::Up); |
| 1876 | } |
| 1877 | } |
| 1878 | } else { |
| 1879 | GPRSLOG(1) <<"ERROR: downlinkacknack for "<<LOGVAR(tfi)<<" with no TBF!"; |
| 1880 | } |
| 1881 | } |
| 1882 | |
| 1883 | static void uplinkCommon(uint32_t tlli, RadData &rd, const char *culprit) |
| 1884 | { |
no test coverage detected