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; }
//======================================================================================= 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; }
//======================================================================================= //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(); }