Пример #1
0
/* Encode UCI CQI/PMI as described in 5.2.2.6 of 36.212 
 */
int srslte_uci_encode_cqi_pusch(srslte_uci_cqi_pusch_t* q,
                                srslte_pusch_cfg_t*     cfg,
                                uint8_t*                cqi_data,
                                uint32_t                cqi_len,
                                float                   beta,
                                uint32_t                Q_prime_ri,
                                uint8_t*                q_bits)
{
  if (beta < 0) {
    ERROR("Error beta is reserved\n");
    return -1;
  }

  uint32_t Q_prime = Q_prime_cqi(cfg, cqi_len, beta, Q_prime_ri);
  uint32_t Qm      = srslte_mod_bits_x_symbol(cfg->grant.tb.mod);

  int ret = SRSLTE_ERROR;
  if (cqi_len <= 11) {
    ret = encode_cqi_short(q, cqi_data, cqi_len, q_bits, Q_prime * Qm);
  } else {
    ret = encode_cqi_long(q, cqi_data, cqi_len, q_bits, Q_prime * Qm);
  }
  if (ret) {
    return ret;
  } else {
    return (int)Q_prime;
  }
}
Пример #2
0
/* Encode UCI CQI/PMI 
 */
int srslte_uci_decode_cqi_pusch(srslte_uci_cqi_pusch_t *q, srslte_pusch_cfg_t *cfg,
                                int16_t *q_bits, 
                                float beta, uint32_t Q_prime_ri, uint32_t cqi_len, 
                                uint8_t *cqi_data, bool *cqi_ack)
{
  if (beta < 0) {
    fprintf(stderr, "Error beta is reserved\n");
    return -1; 
  }
  uint32_t Q_prime = Q_prime_cqi(cfg, cqi_len, beta, Q_prime_ri);

  int ret = SRSLTE_ERROR;
  if (cqi_len <= 11) {
    ret = decode_cqi_short(q, q_bits, Q_prime*cfg->grant.Qm, cqi_data, cqi_len);
  } else {
    ret = decode_cqi_long(q, q_bits, Q_prime*cfg->grant.Qm, cqi_data, cqi_len);
    if (ret == 1) {
      if (cqi_ack) {
        *cqi_ack = true; 
      }
      ret = 0; 
    } else if (ret == 0) {
      if (cqi_ack) {
        *cqi_ack = false; 
      }
    }
  }
  if (ret) {
    return ret;
  } else {
    return (int) Q_prime;
  }

  return Q_prime;   
}