bool Signal::processManchesterAtoms(int burstStart, int numBits, float used, float bitDur, float* pFr)   
{
	int i;
	float delta = 0.1 * bitDur;
	float edge;
	float first[2];
	first[0] = 0.5 * bitDur; first[1] = bitDur; 
	int burstIdx = burstStart;
	int burstMax = pFrameEnd - pFr;
	int bitIdx = 0;
	do {	
		for (i=0; i<1; i++) { 
			edge = first[i]; 
			if (abs(pFr[burstIdx]- used - edge) < delta) { 
				cBits[bitIdx >> 3] |= (burstIdx&1) << (7 - bitIdx&7);
				burstIdx++;
				if (abs(pFr[burstIdx] - (bitDur - edge)) < delta) {
					used = 0.0;
					burstIdx++;
				}
				else
					used = bitDur - edge;
				break;
			}
			else  
				 return false;
		}
		if (i > 1 || burstIdx > burstMax) 
			return false;  //arrive here if no match found
		bitIdx++;
		if (bitIdx >= sizeof(cBits)*8) 
			return false;  //not enough room in cBits
	} while (bitIdx < numBits);
	pBit = pFr + burstIdx;
	nBit = bitIdx;
	return true;
}

void Signal::tryAdNotam()
//
// Ad Notam        {35.7Khz,895,msb}<1,-1|-1,1>(0:1,1:1,D:6,F:6,^114m)+   DAR  August 2012

{
	if ( nFrameL < 6 )
		return;
	const float HB = 889; 
	if ( nTotDur < 10.*HB )
		return;
	if ( sortOn.min1 < HB * .3 )
		return;
	if ( sortOn.max1 > HB * 2.4 )
		return;
	if (   !framed(20*HB)  //framed(nGap) is: return nGap <= frame, which pFramedEnd
		|| nMaxDur > HB*6.5    
        || sortBurst.max2 > HB*4.5  // nominal 2,-2
		|| *pFrame < HB*.5
		|| sortOff.max1 > 3 * HB )
	{
		return;
	}
	cleanup();
    if (!processManchesterAtoms(0, 14, 0, 2*HB, pFrame)) 
		return;
	if (nBit != 14)
		return;
	if (getMsb(0,2) != 1 )
		return;
	*pDevice = getMsb(2,6);
	*pOBC = getMsb(8,6);
	strcpy(pProtocol, "Ad Notam");
}

