according to GSM 05.02:

general parameters from CCCH:
* CA cell allocation of ARFCN's (System Information / BCCH)
* FN: TDMA frame number (t1,t2,t3') in SCH

specific parameters from channel assignment:
* MA: mobile allocation, defines set of ARFCN's, up to 64
* MAIO: index
* HSN: hopping sequence generator number (0..64)


hopping sequence generation (6.2.3):

uint8_t rntable[114] = {
	 48,  98,  63,   1,  36,  95,  78, 102,  94,  73,
	  0,  64,  25,  81,  76,  59, 124,  23, 104, 100,
	101,  47, 118,  85,  18,  56,  96,  86,  54,   2,
	 80,  34, 127,  13,   6,  89,  57, 103,  12,  74,
	 55, 111,  75,  38, 109,  71, 112,  29,  11,  88,
	 87,  19,   3,  68, 110,  26,  33,  31,   8,  45,
	 82,  58,  40, 107,  32,   5, 106,  92,  62,  67,
	 77, 108, 122,  37,  60,  66, 121,  42,  51, 126,
	117, 114,   4,  90,  43,  52,  53, 113, 120,  72,
	 16,  49,   7,  79, 119,  61,  22,  84,   9,  97,
	125,  99,  17, 123
};

/* mai=0 represents lowest ARFCN in the MA */


uint8_t hopping_mai(uint8_t hsn, uint32_t fn, uint8_t maio,
		     uint8_t t1, uint8_t t2, uint8_t t3_)
{
	uint8_t mai;

	if (hsn == 0) /* cyclic hopping */
		mai = (fn + maio) % n;
	else {
		uint32_t m, m_, t_, s;

		m = t2 + rntable[(hsn xor (t1 % 64)) + t3];
		m_ = m % (2^NBIN);
		t_ = t3 % (2^NBIN);
		if (m_ < n then)
			s = m_;
		else
			s = (m_ + t_) % n;
		mai = (s + maio) % n;
	}

	return mai;
}

