Beispiel #1
0
/*
 * Manages the DMA Half Transfer complete interrupt.
 */
void BSP_AUDIO_IN_HalfTransfer_CallBack(void)
{
  arm_copy_q7((q7_t *)AUDIO_BUFFER_IN, (q7_t *)AUDIO_BUFFER_OUT, AUDIO_BLOCK_SIZE*4);
  // copy the new recording data 
  for (int i=0;i<AUDIO_BLOCK_SIZE;i++) {
    audio_buffer[i] = AUDIO_BUFFER_IN[i*2];
  }
  run_kws();
  return;
}
Beispiel #2
0
/*
 * Manages the DMA Transfer complete interrupt.
 */
void BSP_AUDIO_IN_TransferComplete_CallBack(void)
{
  arm_copy_q7((q7_t *)AUDIO_BUFFER_IN + AUDIO_BLOCK_SIZE*4, (q7_t *)AUDIO_BUFFER_OUT + AUDIO_BLOCK_SIZE*4, AUDIO_BLOCK_SIZE*4);
  // copy the new recording data 
  for (int i=0;i<AUDIO_BLOCK_SIZE;i++) {
    audio_buffer[i] = AUDIO_BUFFER_IN[2*AUDIO_BLOCK_SIZE+i*2];
  }
  run_kws();
  return;
}
Beispiel #3
0
void ConfluentEfficiencyExchange(void *pvParameters)
{
	char *pinBuffer = (char*) pvParameters;
	char *poutBuffer = NULL;
	pinBuffer = &pinBuffer[LIS_START];
	
	if (pdTRUE == xSemaphoreTake(TargetInformationEmpty, portMAX_DELAY))
	{
		if (pdTRUE == xSemaphoreTake(TargetInformationCounterMutex, portMAX_DELAY))
		{				
			if (poutBuffer = GetBuffer(&TargetInformationPool))
			{
				arm_copy_q7(pinBuffer, poutBuffer, TARGETNUM + 1);
				xSemaphoreGive(TargetInformationCounterMutex);
			}
			xSemaphoreGive(TargetInformationFull);
		}
	}
//  printf("TargetInformation: %d %d %d %d %d %d %d\r\n", pinBuffer[0],pinBuffer[1],pinBuffer[2],pinBuffer[3],pinBuffer[4],pinBuffer[5],pinBuffer[6]);
}
Beispiel #4
0
void Discovery(void *pvParameters)
{
	char *pBuffer = NULL;
	if (pdTRUE == xSemaphoreTake(SendPacketPoolEmpty, portMAX_DELAY))
	{
		if (pdTRUE == xSemaphoreTake(SendPacketPoolCounterMutex, portMAX_DELAY))
		{
			pBuffer = GetBuffer(&SendPacketPool);
			xSemaphoreGive(SendPacketPoolCounterMutex);
			
			pBuffer[DES_NUM] = 0x00;
			pBuffer[SRC_NUM] = SELFADDRESS;
			pBuffer[PRC_NUM] = DISCOVERY_ACCOMPLISHED;
			pBuffer[LEN_NUM] = NbrCount;
			arm_copy_q7(NbrList + 1, &pBuffer[LIS_START], NbrList[0]);
			//arm_copy_q7(&inBuffer[0], &pBuffer[LIS_START], TARGETINFORMATIONLENGTH);
			xSemaphoreGive(SendPacketPoolFull);
		}
	}		
}
Beispiel #5
0
void TargetInformaion(void *pvParameters)
{
	u8 *pinBuffer;
	u8 *pBuffer = NULL;
	pinBuffer = (u8*) pvParameters;
	
	if (pdTRUE == xSemaphoreTake(TargetInformationEmpty, portMAX_DELAY))
	{
		if (pdTRUE == xSemaphoreTake(TargetInformationCounterMutex, portMAX_DELAY))
		{
			if (pBuffer = GetBuffer(&TargetInformationPool))
			{
				xSemaphoreGive(TargetInformationCounterMutex);
				
	      arm_copy_q7(&pinBuffer[LIS_START], &pBuffer[0], pinBuffer[LEN_NUM]);
				xSemaphoreGive(TargetInformationFull);
			}		
		}
	}
	
}
Beispiel #6
0
/* This function runs before the OS start. */
void NetworkConnecting()
{
	int i, p, test, test1;
	int sendcounter = 0;
	u32 *pu32 = NULL;
	
	test1 = Timer2Counter;
	test = Timer2Counter;
	
	
	sPacketbuf[DES_NUM] = SELFADDRESS;
	sPacketbuf[SRC_NUM] = SELFADDRESS;
	
	CC2500_SeleChannel(0);
	CC2500_SetRecvAddr(SELFADDRESS);

	CC2500_SetRxd();
	
	CC2500_SendPacket(sPacketbuf,PACKET_LEN);
	CC2500_SetRxd();
	
	sPacketbuf[DES_NUM]=0x00;
	NbrList[0]=NbrCount;
	
//	while(RESET==RNG_GetFlagStatus(RNG_FLAG_DRDY));
//	Delay_100us(RNG_GetRandomNumber() & 0x000000f);
  pu32 = (u32*) &sPacketbuf[1];
	while (0 == NodeFlag[SELFADDRESS])
	{
		if (ISIDLE)
		{
			NbrList[0] = NbrCount;
			sPacketbuf[PRC_NUM] = DISCOVERY_MESSAGE;
			arm_copy_q7(NbrList, sPacketbuf+LEN_NUM, NbrList[0]+1);
			pu32[CRC_LENGTH - 2] = Timer2Counter;//Add the timestamp.
			CRC_ResetDR();
			pu32[CRC_LENGTH - 1] = CRC_CalcBlockCRC(pu32, CRC_LENGTH - 1);
			p = Bernoulli(1.0/(MAXNUM-NbrCount+1));
			//Delay_100us(1);
			if (ISIDLE)
			{
				if (0 == DelayFlag)
				{
					if (p/*Bernoulli(1.0/(MAXNUM-NbrCount+1))*/)
					{
						
						CC2500_SendPacket(sPacketbuf, PACKET_LEN);
						CC2500_SetRxd();
						DelayFlag=1;
					}
				}
				else
				{
					Preemptive_Delay_100us(25, &DelayFlag);
					DelayFlag=0;
				}
			}
		}
	
	}
	
	
	test1 = Timer2Counter - test1;
	while(MAXNUM > NbrCount)
	{
		if (0 != DiscoveryHelp)
		{
			if (ISIDLE)
			{
				Delay_100us(1);
				if (ISIDLE)
				{	
          if (Bernoulli(1.0/(MAXNUM-NbrCount+1)))
					{						
						NbrList[0] = NbrCount;
						sPacketbuf[PRC_NUM] = DISCOVERY_MESSAGE;
						arm_copy_q7(NbrList, sPacketbuf+LEN_NUM, NbrList[0]+1);
						pu32[CRC_LENGTH - 2] = Timer2Counter;//Add the timestamp.
						CRC_ResetDR();
						pu32[CRC_LENGTH - 1] = CRC_CalcBlockCRC(pu32, CRC_LENGTH - 1);
						CC2500_SendPacket(sPacketbuf, PACKET_LEN);
						CC2500_SetRxd();
					}
				}
			}	
			DiscoveryHelp = 0;
		}
		
	}
	
	test = Timer2Counter - test;
	while(RESET==RNG_GetFlagStatus(RNG_FLAG_DRDY));
	Delay_100us(RNG_GetRandomNumber() & 0x000000f);
	
	pu32[CRC_LENGTH - 2] = Timer2Counter;//Add the timestamp.
	sendcounter = 3;
	while (0 != sendcounter)
	{
		if (ISIDLE)
		{
			Delay_100us(1);
			if (ISIDLE)
			{				
				NbrList[0] = NbrCount;
				sPacketbuf[PRC_NUM] = DISCOVERY_ACCOMPLISHED;
				arm_copy_q7(NbrList, sPacketbuf+LEN_NUM, NbrList[0]+1);
				CRC_ResetDR();
				pu32[CRC_LENGTH - 1] = CRC_CalcBlockCRC(pu32, CRC_LENGTH - 1);
				CC2500_SendPacket(sPacketbuf, PACKET_LEN);
				CC2500_SetRxd();
				sendcounter--;
			}
		}	
		Delay_100us(10);
	}
	
	printf("NeighbourList:\r\n");
	for (i=0;i<MAXNUM;i++)
	{
		printf("%#x\r\n",NbrList[1+i]);
	}
  printf("t1 = %d\r\n", test1);
	printf("t = %d\r\n", test);
}