[PATCH] Add generic a5/* availability test.

Max Max.Suraev at fairwaves.ru
Tue Apr 9 15:18:42 UTC 2013


---
 include/osmocom/gsm/gsm_utils.h |   24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/include/osmocom/gsm/gsm_utils.h b/include/osmocom/gsm/gsm_utils.h
index cdbac87..9c3ec19 100644
--- a/include/osmocom/gsm/gsm_utils.h
+++ b/include/osmocom/gsm/gsm_utils.h
@@ -26,6 +26,7 @@
 #define GSM_UTILS_H
 
 #include <stdint.h>
+#include <stdlib.h>
 
 #define ADD_MODULO(sum, delta, modulo) do {	\
 	if ((sum += delta) >= modulo)		\
@@ -74,17 +75,36 @@ int rxlev2dbm(uint8_t rxlev);
 uint8_t dbm2rxlev(int dbm);
 
 /* According to GSM 04.08 Chapter 10.5.1.6 */
-static inline int ms_cm2_a5n_support(uint8_t *cm2, int n) {
+static inline int ms_cm2_a5n_support(uint8_t *cm2, unsigned n) {
 	switch (n) {
 		case 0: return 1;
 		case 1: return (cm2[0] & (1<<3)) ? 0 : 1;
 		case 2: return (cm2[2] & (1<<0)) ? 1 : 0;
 		case 3: return (cm2[2] & (1<<1)) ? 1 : 0;
 		default:
-			return 0;
+			return (n > 7) ? 0 : -1;
 	}
 }
 
+/* According to GSM 04.08 Chapter 10.5.1.7 */
+static inline int ms_cm3_a5n_support(uint8_t *cm3, unsigned n) {
+	switch (n) {
+		case 4: return (cm3[0] & (1<<0)) ? 1 : 0;
+		case 5: return (cm3[0] & (1<<1)) ? 1 : 0;
+		case 6: return (cm3[0] & (1<<2)) ? 1 : 0;
+	        case 7: return (cm3[0] & (1<<3)) ? 1 : 0;
+		default:
+			return (n > 7) ? 0 : -1;
+	}
+}
+
+/* Either classmark could be NULL */
+static inline int ms_a5n_support(uint8_t *cm2, uint8_t *cm3, unsigned n) {
+	if ((NULL != cm3) && n > 3) return ms_cm3_a5n_support(cm3, n);
+	if ((NULL != cm2) && n < 4) return ms_cm2_a5n_support(cm2, n);
+	return 0;
+}
+
 /* According to GSM 04.08 Chapter 10.5.2.29 */
 static inline int rach_max_trans_val2raw(int val) { return (val >> 1) & 3; }
 static inline int rach_max_trans_raw2val(int raw) {
-- 
1.7.10.4


--------------080107010001070606070100--




More information about the baseband-devel mailing list