int main ()
{
	// start delay
	
	_delay_ms(DEVICE_START_DELAY_MS);

	Init_Spi();

	DDRC |= 0x01;
	PORTC |= 0x01;

	RFM73_Initialize();

	RFM73_SetPower(MODULE_POWER);
	SwitchToRxMode();

	DDRD = 0b00000000;
	PORTD = 0b00000100;

	SetupTIMER1();
	sei();

	sleep_enable();

	
	while (1)
	{
		if (state == OFF){
			DOWNBIT(PORTC, 0);
			sleep_cpu();
		} else {
			SwitchToTxMode();
			for(char i=0;i<POWERCOUNT;i++)
			{
				SwitchToTxMode();
				Send_Packet(W_TX_PAYLOAD_NOACK_CMD,tx_buf,4);

				SwitchToRxMode();  //switch to Rx mode

				_delay_ms(150);
				INVBIT(PORTC, 0);
			}
		}
	}

	return 0;

}
Exemple #2
0
//=======================================================================================
void initSendMachine(){
	//senderInit();
	Init_Spi();
	RFM73_Initialize();
	RFM73_SetPower(0x03);
	SwitchToTxMode();
}
/**************************************************
Function: Send_Packet
Description:
	fill FIFO to send a packet
Parameter:
	type: WR_TX_PLOAD or  W_TX_PAYLOAD_NOACK_CMD
	pbuf: a buffer pointer
	len: packet length
Return:
	None
**************************************************/
char Send_Packet(UINT8 type,UINT8* pbuf,UINT8 len)
{
	UINT8 fifo_sta;
	
	SwitchToTxMode();  //switch to tx mode

	fifo_sta=SPI_Read_Reg(FIFO_STATUS);	// read register FIFO_STATUS's value
	if((fifo_sta&FIFO_STATUS_TX_FULL)==0)//if not full, send data (write buff)
	{ 
	  	//RED_LED = 1;
		
		SPI_Write_Buf(type, pbuf, len); // Writes data to buffer
		
		//delay_50ms();
		//RED_LED = 0;
		//delay_50ms();
		_delay_ms(100);
	}	  
	
	return 0;	 	
}
Exemple #4
0
//=======================================================================================
//inline
void sendMachine_3(){
	enum {	DATAMAXLEN = 64,
			DATAMARKERPOSITION = 0, DATAMARKER = '?',
			DATACODELENPOSITION = 1,
			DATACODEPOSION = 2		};

	#define ASKDATALEN 3
	char ASKDATA[ASKDATALEN] = "***";
	#define ANSWERDATALEN 3
	char ANSWERDATA[ANSWERDATALEN] = "+++";


	static char data[DATAMAXLEN];

	#define REPCOUNTER 3
	static char repeat_counter = REPCOUNTER;


	enum {WAITNEWCODE, WAITCODEDONE, WAITBOX, SENDTOBOX, WAITDELAY};
	static char state = WAITNEWCODE;

	switch (state){
		//========================
		case WAITNEWCODE:
		//========================
			if (getFlag(FLAG_NEW_NOCK) == TRUE)
				state = WAITCODEDONE;
			break;
		//========================
		case WAITCODEDONE:
		//========================
			if (getFlag(FLAG_NEW_NOCK) == FALSE){
				//state = WAITBOX; //DEBUG
				state = SENDTOBOX;
			}
			break;
		//========================
		case WAITBOX:{
		//========================
			char len = Receive_Packet(data, DATAMAXLEN);
			if (len > 0){

				#ifdef LOGG	
				loggerWriteToMarker((LogMesT)" WAITBOX get data: *", '*');
				loggerWrite((LogMesT)data, len);
				#endif

				for (char i = 0; i < ANSWERDATALEN; i++)
					if (data[i] != ANSWERDATA[i])
						return;
				
				state = SENDTOBOX;
				break;
			}
			SwitchToTxMode();

			Send_Packet(W_TX_PAYLOAD_NOACK_CMD, (unsigned char *)ASKDATA, ASKDATALEN);
			//Send_Packet(0, ASKDATA, ASKDATALEN);
			SwitchToRxMode();

			state = WAITDELAY;
			}break;
		//========================
		case WAITDELAY:
		//========================
			if (processWait() == TRUE)
				#ifdef LOGG	
				loggerWriteToMarker((LogMesT)" goto WAITBOX\r*", '*');
				#endif

				state = WAITBOX;
			break;
		//========================
		case SENDTOBOX:{
		//========================
			#ifdef LOGG	
			loggerWriteToMarker((LogMesT)" SENDTOBOX\r*", '*');
			#endif

			SwitchToTxMode();

			Nock * nock = getNock(NOCK_PATTERN);

			data[DATAMARKERPOSITION] = DATAMARKER;
			data[DATACODELENPOSITION] = nock->count;

			unsigned char i;
			for (i = 0; i < nock->count; i++){
				int time = nock->nock[i];
				char * p = &time; 
				data[DATACODEPOSION + i*2] = *p;
				p++;
				data[DATACODEPOSION + i*2 + 1] = *p; 
			}

			data[DATACODEPOSION + i * 2] = DATAMARKER;
			Send_Packet(W_TX_PAYLOAD_NOACK_CMD, (unsigned char *)data, DATACODEPOSION + nock->count * 2 + 1);
			//Send_Packet(0, (unsigned char *)data, DATACODEPOSION + nock->count + 1);

			#ifdef LOGG	
			loggerWriteToMarker((LogMesT)" nock count: *", '*');
			char ch = nock->count + 48;
			loggerWrite(&ch, 1);
			#endif
		
			if (repeat_counter-- <= 0){
				repeat_counter = REPCOUNTER;
				state = WAITNEWCODE;
			}
			

			}break;
		//========================
		default: break;
		//========================
	}
}
//-------------------------------------------------------
//Function: 
//Desc	: 
//Input	:
//Output: 
//Return: 
//Others: 
//Author: 
//Date	: 2011/03/01
//-------------------------------------------------------
void system_test_mode(void)
{
	BYTE i=0;
	BYTE channel = 0;
	BYTE sc_sub_mode = 0;
	BYTE sc_count = 0;
	BYTE uTestCHIndex;
	BYTE uLEDBlinkDuty;
	
	BK2401_RETR = 0x00;						
	BK2401_ENAA = 0x00;
	BK2401_ENRX = 0x00;
	PowerUp_RF();
	SwitchToTxMode();
	BK2401_CE = 0X00;
	BK2401_CE = 0X01;
	
	i = 1;
	uTestCHIndex = TEST_CHANNEL[i];	
	BK2401_RFCH=RF_TABLE[uTestCHIndex];
	channel = RF_TABLE[uTestCHIndex];

	RF_SetLowOuput();
//	RF_Set_Mode(1);
	RF_Set_Mode(0);
	system.work_sub_mode = TEST_SC;
	
	uLEDBlinkDuty = 0;
	
	if(get_bindkey())
		system.Key.bKey.bBindKeyState = 1;
	
	while(system.work_mode == SYSTEM_TEST)
	{
		if(u10msFlag & bSysCheck)
		{
			u10msFlag &= ~bSysCheck;
			Sys_KeyScan();
			if(system.Key.bKey.bBindKeyValid)
			{
				system.Key.bKey.bBindKeyValid = 0;
				i++;
				if(i>=3)
				{
					i=0;
				}
				uTestCHIndex = TEST_CHANNEL[i];	
				BK2401_RFCH=RF_TABLE[uTestCHIndex];
				channel = uTestCHIndex;
			}

			if(++uLEDBlinkDuty > 99)
			{
				uLEDBlinkDuty = 0;
				LEDToggle();
			}
			
			switch(system.work_sub_mode)  	//²âÊÔģʽ
			{
				case TEST_SC:				//µ¥Ôز¨	
					break;
					
				case TEST_CD:				//µ÷ÊÔ £¬FCC²âÊÔ
					FIFO_data[0] = 0xCC;
					FIFO_data[1] = 0xCC;
					FIFO_data[2] = 0xCC;
					FIFO_data[3] = 0xCC;
					FIFO_data[4] = 0xCC;
					FIFO_data[5] = 0xCC;
					FIFO_data[6] = 0xCC;
					FIFO_data[7] = 0xCC;
					FIFO_data[8] = 0xCC;
					FIFO_data[9] = 0xCC;
					FIFO_data[10] = 0xCC;
					FIFO_data[11] = 0xCC;
					FIFO_data[12] = 0xCC;
					FIFO_data[13] = 0xCC;
					FIFO_data[14] = 0xCC;
					FIFO_data[15] = 0xCC;
					FIFO_data[16] = 0xCC;
					FIFO_data[17] = 0xCC;
					FIFO_data[18] = 0xCC;
					FIFO_data[19] = 0xCC;
					FIFO_data[20] = 0xCC;
					FIFO_data[21] = 0xCC;
					FIFO_data[22] = 0xCC;
					FIFO_data[23] = 0xCC;
					FIFO_data[24] = 0xCC;
					W_TX_PAYLOAD_NOACK(FIFO_data,25);
					WaitUs(50);
					W_TX_PAYLOAD_NOACK(FIFO_data,25);
					WaitUs(50);
					W_TX_PAYLOAD_NOACK(FIFO_data,25);
					WaitUs(50);
					W_TX_PAYLOAD_NOACK(FIFO_data,25);
					WaitUs(50);
					W_TX_PAYLOAD_NOACK(FIFO_data,25);
					WaitUs(50);
					break;
					
				case TEST_RF_DATA:			//·¢ËÍÊý¾Ý
					FIFO_data[0] = DATATYPE_MOUSE;
					FIFO_data[1] = 0;	
					FIFO_data[2] = 0;
					FIFO_data[3] = 2;
					FIFO_data[4] = 0;
					W_TX_PAYLOAD_NOACK(FIFO_data,5);
					WaitUs(50);
					W_TX_PAYLOAD_NOACK(FIFO_data,5);
					WaitUs(50);
					W_TX_PAYLOAD_NOACK(FIFO_data,5);
					WaitUs(50);
					W_TX_PAYLOAD_NOACK(FIFO_data,5);
					WaitUs(50);
					W_TX_PAYLOAD_NOACK(FIFO_data,5);
					WaitUs(50);
					break;
					
				default:
					system.work_sub_mode = TEST_SC;
					break;
			}

			switch(sc_sub_mode)
			{
				case 0 :
					break;
					
				case 1 :
					sc_count++;
					if(sc_count >= 2)
					{
						sc_count = 0;
						channel++;
						if(channel >= 82)
						{
							channel = 0;
						}		
						BK2401_RFCH=channel;
					}
					break;
					
				case 2 :
					sc_count++;
					if(sc_count >= 2)
					{
						sc_count = 0;
						if(channel == 0)
						{
							channel = 82;	
						}else{
							channel--;
						}		
						BK2401_RFCH=channel;
					}
					break;
					
				default:
					break;
			}
		}
		
		//usb data dispose
		if(system.usbp0_data.aceept)
		{
			system.usbp0_data.aceept = 0;

			if(COMMAND_TEST == system.usbp0_data.set_report_data[0])
			{
				switch(system.usbp0_data.set_report_data[1])
				{
					case COM_TEST_SC : 
						system.work_sub_mode = TEST_SC; 
						RF_Set_Mode(0);
						system.usbp0_data.reday_report_flag = 1; 
						break;
						
					case COM_TEST_CD: 
						system.work_sub_mode = TEST_CD; 
						RF_Set_Mode(1); 
						system.usbp0_data.reday_report_flag = 1;
						break;
						
					case COM_TEST_DAT: 
						system.work_sub_mode = TEST_RF_DATA; 
						RF_Set_Mode(1);  
						system.usbp0_data.reday_report_flag = 1;
						break;
						
					case COM_TEST_LOW_CH:   
						i=0;
						uTestCHIndex = TEST_CHANNEL[i];	
						BK2401_RFCH=RF_TABLE[uTestCHIndex];
						channel = uTestCHIndex;
						system.usbp0_data.reday_report_flag = 1;
						break;
						
					case COM_TEST_MID_CH:  
						i=1;
						uTestCHIndex = TEST_CHANNEL[i];	
						BK2401_RFCH=RF_TABLE[uTestCHIndex];
						channel = uTestCHIndex;
						system.usbp0_data.reday_report_flag = 1;
						break;
						
					case COM_TEST_HIG_CH: 
						i=2;
						uTestCHIndex = TEST_CHANNEL[i];	
						BK2401_RFCH=RF_TABLE[uTestCHIndex];
						channel = uTestCHIndex;
						system.usbp0_data.reday_report_flag = 1;
						break;
						
					case COM_TEST_SW_HIG: 
						sc_sub_mode = 1; 
						system.usbp0_data.reday_report_flag = 1;
						break;
						
					case COM_TEST_SW_LOW: 
						sc_sub_mode = 2; 
						system.usbp0_data.reday_report_flag = 1;
						break;
						
					case COM_TEST_SW_STOP: 
						sc_sub_mode = 0; 
						system.usbp0_data.reday_report_flag = 1;
						break;
						
					case COM_TEST_POW_5: 
						RF_Set_ouput_power(3); 
						system.usbp0_data.reday_report_flag = 1;
						break;
						
					case COM_TEST_POW_0: 
						RF_Set_ouput_power(2); 
						system.usbp0_data.reday_report_flag = 1;
						break;
						
					case COM_TEST_POW_N5: 
						RF_Set_ouput_power(1); 
						system.usbp0_data.reday_report_flag = 1;
						break;
						
					case COM_TEST_POW_N10: 
						RF_Set_ouput_power(0); 
						system.usbp0_data.reday_report_flag = 1;
						break;
						
					case COM_TEST_EXIT:  
						system.work_mode = SYSTEM_WORK; 
						system.usbp0_data.reday_report_flag = 1;
						break;
						
					default : 
						system.usbp0_data.reday_report_flag = 0; 
						break;
				}
			}
			else if(COMMAND_CURRENT_MODE  == system.usbp0_data.set_report_data[0])
			{
				system.usbp0_data.get_report_data[1] = COMMAND_TEST;
				system.usbp0_data.reday_report_flag = 1;
			}
		}
	}
	BK2433_RF_Initial();
	SwitchToRxMode();
	PowerUp_RF();
}