Hello,
I'm currently working on a proof of concept for a foreign customer. We have a Fairwaves UmTRX board and we would like to send Cell Broadcast message (SMS-CB).
I have a full working osmocom chain (trx, bts-trx, bsc, stp, msc, hlr) that woks fine for SMS sending by example.

I have made a fix in rsl.c because all SMSCB commands where rejected (see at bottom of this message).

I have dig into the code and found the place where the SMS CB are queued (rsl.c : bts_process_smscb_cmd) and the code to extract them as MAC blocks (rsl.c : bts_cbch_get).

I have also found the handler of the scheduler (scheduler_trx.c : tx_data_fn) where to put the block data.

I have read articles about the superframe mechanism but I do not figure out how to advertise the CBCH functionality on the BCCH, nor how to adapt the scheduler to enable the CB channel.


Is it someone also interrested in this and/or working on the Bug 1617?
Or is it someone that can me give a track to start the implementation?


Have a nice day,
Antony


-----------------------------------------------------------------------------------------------------------
Fix in rsl.c :
-----------------------------------------------------------------------------------------------------------
replaced :
        if (chan_nr_is_dchan(cch->chan_nr))
               return rsl_reject_unknown_lchan(msg);

       msg->lchan = lchan_lookup(trx, cch->chan_nr, "RSL rx CCHAN: ");
       if (!msg->lchan) {
               LOGP(DRSL, LOGL_ERROR, "Rx RSL %s for unknown lchan\n",
                       rsl_msg_name(cch->c.msg_type));
               return rsl_reject_unknown_lchan(msg);
      }

-----------------------------------------------------------------------------------------------------------
by:
if (chan_nr_is_dchan(cch->chan_nr))
        {
            printf("Message NOT for DCHAN\n");
            //return rsl_reject_unknown_lchan(msg);
        }
        else
        {     
            printf("Message for DCHAN\n");
            
            // Only check channel validity if  it is a dedicated channel call.
            msg->lchan = lchan_lookup(trx, cch->chan_nr, "RSL rx CCHAN: ");
            if (!msg->lchan) {
                    LOGP(DRSL, LOGL_ERROR, "Rx RSL %s for unknown lchan\n",
                            rsl_msg_name(cch->c.msg_type));
                    return rsl_reject_unknown_lchan(msg);
            }
        }