///auto mcc3 = (unsigned char)((data[1] & (unsigned char)0xF0) >> (unsigned char)4);
auto mcc3 = (unsigned char)((unsigned char)(data[1] & (unsigned char)0x0F));
- auto mnc1 = (unsigned char)(data[2] & (unsigned char)0x0F);
- auto mnc2 = (unsigned char)(((unsigned char)(data[2] & (unsigned char)0xF0) >> (unsigned char)4));
+ auto mnc1 = (unsigned char)(((unsigned char)((unsigned char)data[1] & (unsigned char)0xF0)) >> (unsigned char)4);
+ auto mnc2 = (unsigned char)((unsigned char)data[2] & (unsigned char)0x0F) ;
//auto mnc3 = (unsigned char)(((unsigned char)(data[1] & (unsigned char)0x0F) >> (unsigned char)4) );
- auto mnc3 = (unsigned char)((data[1] & (unsigned char)0xF0) >> (unsigned char)4);
+ auto mnc3 = (unsigned char)(((unsigned char)((unsigned char)data[2] & (unsigned char)0xF0)) >> (unsigned char)4);
int j = 0;
- if (mnc3 != 15) {
+ if (mnc1 != 15) {
j = snprintf(plmnId, 20, "%s%1d%1d%1d_%1d%1d%1d", type, mcc1, mcc2, mcc3, mnc1, mnc2, mnc3);
}
else {
- j = snprintf(plmnId, 20, "%s%1d%1d%1d_0%1d%1d", type, mcc1, mcc2, mcc3, mnc1, mnc2);
+ j = snprintf(plmnId, 20, "%s%1d%1d%1d_0%1d%1d", type, mcc1, mcc2, mcc3, mnc2, mnc3);
}
return j;
// dont care of last unused bits
char buffer[256] {};
auto j = snprintf(buffer, 256, "%s_", ranName);
+
memcpy(ranName, buffer, j);
+/*
+ // ran name decimal
+ unsigned long bitValue = 0;
+ for (auto i = 0; i < (int)data.size; i++) {
+ bitValue <<= (unsigned long)8;
+ bitValue += data.buf[i];
+ }
+
+ j = snprintf(buffer, 256, "%s%ld", ranName, bitValue);
+
+ memcpy(ranName, buffer, j);
+*/
+
unsigned b1 = 0;
unsigned b2 = 0;
+ unsigned tmp_digit=0;
for (auto i = 0; i < (int)data.size; i++) {
- b1 = data.buf[i] & (unsigned)0xF0;
+ //
+ // we need to shift trailing zeros in the bit string (from asn1c) to leading zeros
+ //
+ tmp_digit = (0==i ? (uint8_t) 0: (uint8_t) data.buf[i-1])<<(8-data.bits_unused);
+ tmp_digit = tmp_digit | ((unsigned) data.buf[i] >> data.bits_unused);
+
+ b1 = tmp_digit & (unsigned)0xF0;
b1 = b1 >> (unsigned)4;
j = snprintf(buffer, 256, "%s%1x", ranName, b1);
memcpy(ranName, buffer, j);
- b2 = data.buf[i] & (unsigned)0x0F;
+ b2 = tmp_digit & (unsigned)0x0F;
j = snprintf(buffer, 256, "%s%1x", ranName, b2);
memcpy(ranName, buffer, j);
}
case GlobalE2node_ID_PR_en_gNB: {
auto *enGnb = ie->value.choice.GlobalE2node_ID.choice.en_gNB;
translatePlmnId(ranName,
- (const unsigned char *)enGnb->global_gNB_ID.pLMN_Identity.buf,
+ (const unsigned char *)enGnb->global_en_gNB_ID.pLMN_Identity.buf,
(const char *)"en_gnb_");
- if (enGnb->global_gNB_ID.gNB_ID.present == ENGNB_ID_PR_gNB_ID) {
- translateBitStringToChar(ranName, enGnb->global_gNB_ID.gNB_ID.choice.gNB_ID);
+ if (enGnb->global_en_gNB_ID.gNB_ID.present == ENGNB_ID_PR_gNB_ID) {
+ translateBitStringToChar(ranName, enGnb->global_en_gNB_ID.gNB_ID.choice.gNB_ID);
}
break;
}
default:
break;
}
+ break;
}
case GlobalE2node_ID_PR_eNB: {
auto *enb = ie->value.choice.GlobalE2node_ID.choice.eNB;
break;
}
}
+ break;
}
case GlobalE2node_ID_PR_NOTHING:
default: