bool NRF24L01P::begin(const void* config) { // Setup hardware features, channel, bitrate, retransmission, dynamic payload write(FEATURE, (_BV(EN_DPL) | _BV(EN_ACK_PAY) | _BV(EN_DYN_ACK))); write(RF_CH, m_channel); write(RF_SETUP, (RF_DR_2MBPS | RF_PWR_0DBM)); write(SETUP_RETR, ((2 << ARD) | (15 << ARC))); write(DYNPD, DPL_PA); write(SETUP_AW, AW_3BYTES); // Setup hardware receive pipes (0:ack, 1:device, 2:broadcast) addr_t rx_addr = m_addr; write(RX_ADDR_P1, &rx_addr, sizeof(rx_addr)); write(RX_ADDR_P2, 0); write(EN_RXADDR, (_BV(ERX_P2) | _BV(ERX_P1) | _BV(ERX_P0))); // Auto-acknowledgement on device pipe write(EN_AA, (_BV(ENAA_P2) | _BV(ENAA_P1) | _BV(ENAA_P0))); // Ready to go powerup(); spi.attach(this); m_irq.enable(); return (true); }
/*---------------------------------------------------------------------------*/ int cc2420_init(void) { uint16_t reg; { int s = splhigh(); cc2420_arch_init(); /* Initalize ports and SPI. */ CC2420_DISABLE_FIFOP_INT(); CC2420_FIFOP_INT_INIT(); splx(s); } /* Turn on voltage regulator and reset. */ SET_VREG_ACTIVE(); BUSYWAIT_UNTIL(0, RTIMER_SECOND / 100); SET_RESET_ACTIVE(); BUSYWAIT_UNTIL(0, RTIMER_SECOND / 100); SET_RESET_INACTIVE(); BUSYWAIT_UNTIL(0, RTIMER_SECOND / 100); pan = 0xffff; addr = 0x0000; BUSYWAIT_UNTIL(0, RTIMER_SECOND / 100); powerup(); configure(); flushrx(); process_start(&cc2420_process, NULL); return 1; }
bool NRF24L01P::begin(const void* config) { UNUSED(config); // Setup hardware features, channel, bitrate, retransmission, dynamic payload write(FEATURE, (_BV(EN_DPL) | _BV(EN_ACK_PAY) | _BV(EN_DYN_ACK))); write(RF_CH, m_channel); write(RF_SETUP, (RF_DR_2MBPS | RF_PWR_0DBM)); write(SETUP_RETR, ((DEFAULT_ARD << ARD) | (DEFAULT_ARC << ARC))); write(DYNPD, DPL_PA); // Setup hardware receive pipes address; network (16-bit), device (8-bit) // P0: auto-acknowledge (see set_transmit_mode) // P1: node address<network:device> with auto-acknowledge // P2: broadcast<network:0> addr_t rx_addr = m_addr; write(SETUP_AW, AW_3BYTES); write(RX_ADDR_P1, &rx_addr, sizeof(rx_addr)); write(RX_ADDR_P2, BROADCAST); write(EN_RXADDR, (_BV(ERX_P2) | _BV(ERX_P1))); write(EN_AA, (_BV(ENAA_P1))); // Ready to go powerup(); spi.attach(this); m_irq.enable(); return (true); }
static void on(void) { if(completely_off) { completely_off = 0; powerup(); configure(); } CC2420_ENABLE_FIFOP_INT(); strobe(CC2420_SRXON); BUSYWAIT_UNTIL(status() & (BV(CC2420_XOSC16M_STABLE)), RTIMER_SECOND / 100); ENERGEST_ON(ENERGEST_TYPE_LISTEN); receive_on = 1; }
/*---------------------------------------------------------------------------*/ static int cc2420_prepare(const void *payload, unsigned short payload_len) { uint8_t total_len; #if CC2420_CONF_CHECKSUM uint16_t checksum; #endif /* CC2420_CONF_CHECKSUM */ GET_LOCK(); PRINTF("cc2420: sending %d bytes\n", payload_len); RIMESTATS_ADD(lltx); /* Wait for any previous transmission to finish. */ /* while(status() & BV(CC2420_TX_ACTIVE));*/ if(completely_off) { completely_off = 0; powerup(); configure(); } /* Write packet to TX FIFO. */ strobe(CC2420_SFLUSHTX); #if CC2420_CONF_CHECKSUM checksum = crc16_data(payload, payload_len, 0); #endif /* CC2420_CONF_CHECKSUM */ total_len = payload_len + AUX_LEN; CC2420_WRITE_FIFO_BUF(&total_len, 1); CC2420_WRITE_FIFO_BUF(payload, payload_len); #if CC2420_CONF_CHECKSUM CC2420_WRITE_FIFO_BUF(&checksum, CHECKSUM_LEN); #endif /* CC2420_CONF_CHECKSUM */ RELEASE_LOCK(); return 0; }
int Si4709_dev_powerup(void) { int ret = 0; u32 value = 100; debug("Si4709_dev_powerup called"); if (!(RADIO_ON == Si4709_dev.state.power_state)) { ret = powerup(); if (ret < 0) { debug("powerup failed"); } else if (Si4709_dev.valid_client_state == eFALSE) { debug("Si4709_dev_powerup called " "when DS(state, client) is invalid"); ret = -1; } else { /* initial settings */ #ifdef _ENABLE_RDS_ si47xx_set_property(FM_RDS_CONFIG, 1); si47xx_set_property(GPO_IEN, GPO_IEN_STCIEN_MASK | GPO_IEN_STCREP_MASK); si47xx_set_property(GPO_IEN, GPO_IEN_STCIEN_MASK | GPO_IEN_RDSIEN_MASK | GPO_IEN_STCREP_MASK); si47xx_set_property(FM_RDS_INTERRUPT_SOURCE, FM_RDS_INTERRUPT_SOURCE_RECV_MASK); si47xx_set_property(FM_RDS_CONFIG, FM_RDS_CONFIG_RDSEN_MASK | (3 << FM_RDS_CONFIG_BLETHA_SHFT) | (3 << FM_RDS_CONFIG_BLETHB_SHFT) | (3 << FM_RDS_CONFIG_BLETHC_SHFT) | (3 << FM_RDS_CONFIG_BLETHD_SHFT)); #endif /*VNVS:18-NOV'09 : Setting DE-Time Constant as 50us(Europe,Japan,Australia)*/ si47xx_set_property(FM_DEEMPHASIS, FM_DEEMPH_50US); /* SYSCONFIG2_BITSET_SEEKTH( */ /* &Si4709_dev.registers[SYSCONFIG2],2); */ /*VNVS:18-NOV'09 : modified for detecting more stations of good quality*/ si47xx_set_property(FM_SEEK_TUNE_RSSI_THRESHOLD, TUNE_RSSI_THRESHOLD); si47xx_set_property(FM_SEEK_BAND_BOTTOM, 8750); si47xx_set_property(FM_SEEK_BAND_TOP, 10800); Si4709_dev.settings.band = BAND_87500_108000_kHz; Si4709_dev.settings.bottom_of_band = FREQ_87500_kHz; si47xx_set_property(FM_SEEK_FREQ_SPACING, CHAN_SPACING_100_kHz); Si4709_dev.settings.channel_spacing = CHAN_SPACING_100_kHz; /* SYSCONFIG3_BITSET_SKSNR( */ /* &Si4709_dev.registers[SYSCONFIG3],3); */ /*VNVS:18-NOV'09 : modified for detecting more stations of good quality*/ si47xx_set_property(FM_SEEK_TUNE_SNR_THRESHOLD, TUNE_SNR_THRESHOLD); Si4709_dev.settings.timeout_RDS = msecs_to_jiffies(value); Si4709_dev.settings.curr_snr = TUNE_SNR_THRESHOLD; Si4709_dev.settings.curr_rssi_th = TUNE_RSSI_THRESHOLD; Si4709_dev_STEREO_SET(); /*this will write all the above registers */ if (ret < 0) debug("Si4709_dev_powerup i2c_write 1 failed"); else { Si4709_dev.valid = eTRUE; #ifdef RDS_INTERRUPT_ON_ALWAYS /*Initialising read and write indices */ RDS_Buffer_Index_read = 0; RDS_Buffer_Index_write = 0; RDS_Data_Available = 0; RDS_Data_Lost = 0; RDS_Groups_Available_till_now = 0; #endif } } } else debug("Device already Powered-ON"); enable_irq(Si4709_dev_irq); si47xx_set_property(0xff00, 0); return ret; }
int Si47xx_dev_powerup(void) { int ret = 0; u32 value = 100; debug("Si47xx_dev_powerup called"); if (!(RADIO_ON == Si47xx_dev->state.power_state)) { ret = powerup(); if (ret < 0) { dev_err(Si47xx_dev->dev, "%s failed %d\n", __func__, ret); } else if (Si47xx_dev->valid_client_state == eFALSE) { dev_err(Si47xx_dev->dev, "Si47xx_dev_powerup called " "when DS(state, client) is invalid"); ret = -1; } else { /* initial settings */ #ifdef CONFIG_RADIO_USE_MI2S si47xx_set_property(DIGITAL_OUTPUT_SAMPLE_RATE, 0xBB80); //44100 si47xx_set_property(DIGITAL_OUTPUT_FORMAT, 0x0000); //I2S, 16bit, Riging edge #endif #ifdef _ENABLE_RDS_ si47xx_set_property(FM_RDS_CONFIG, 1); si47xx_set_property(GPO_IEN, GPO_IEN_STCIEN_MASK | GPO_IEN_STCREP_MASK); si47xx_set_property(GPO_IEN, GPO_IEN_STCIEN_MASK | GPO_IEN_RDSIEN_MASK | GPO_IEN_STCREP_MASK); si47xx_set_property(FM_RDS_INTERRUPT_SOURCE, FM_RDS_INTERRUPT_SOURCE_RECV_MASK); si47xx_set_property(FM_RDS_CONFIG, FM_RDS_CONFIG_RDSEN_MASK | (3 << FM_RDS_CONFIG_BLETHA_SHFT) | (3 << FM_RDS_CONFIG_BLETHB_SHFT) | (3 << FM_RDS_CONFIG_BLETHC_SHFT) | (3 << FM_RDS_CONFIG_BLETHD_SHFT)); #endif /*VNVS:18-NOV'09 : Setting DE-Time Constant as 50us(Europe,Japan,Australia)*/ si47xx_set_property(FM_DEEMPHASIS, FM_DEEMPH_50US); /* SYSCONFIG2_BITSET_SEEKTH( */ /* &Si47xx_dev->registers[SYSCONFIG2],2); */ /*VNVS:18-NOV'09 : modified for detecting more stations of good quality*/ si47xx_set_property(FM_SEEK_TUNE_RSSI_THRESHOLD, TUNE_RSSI_THRESHOLD); si47xx_set_property(FM_SEEK_BAND_BOTTOM, 8750); si47xx_set_property(FM_SEEK_BAND_TOP, 10800); Si47xx_dev->settings.band = BAND_87500_108000_kHz; Si47xx_dev->settings.bottom_of_band = FREQ_87500_kHz; si47xx_set_property(FM_SEEK_FREQ_SPACING, CHAN_SPACING_100_kHz); Si47xx_dev->settings.channel_spacing = CHAN_SPACING_100_kHz; /* SYSCONFIG3_BITSET_SKSNR( */ /* &Si47xx_dev->registers[SYSCONFIG3],3); */ /*VNVS:18-NOV'09 : modified for detecting more stations of good quality*/ si47xx_set_property(FM_SEEK_TUNE_SNR_THRESHOLD, TUNE_SNR_THRESHOLD); Si47xx_dev->settings.timeout_RDS = msecs_to_jiffies(value); Si47xx_dev->settings.curr_snr = TUNE_SNR_THRESHOLD; Si47xx_dev->settings.curr_rssi_th = TUNE_RSSI_THRESHOLD; Si47xx_dev->valid = eTRUE; Si47xx_dev_STEREO_SET(); #ifdef RDS_INTERRUPT_ON_ALWAYS /*Initialising read and write indices */ RDS_Buffer_Index_read = 0; RDS_Buffer_Index_write = 0; RDS_Data_Available = 0; RDS_Data_Lost = 0; RDS_Groups_Available_till_now = 0; #endif } } else debug("Device already Powered-ON"); ret = request_irq(si47xx_irq, Si47xx_isr, IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING, "Si47xx", NULL); si47xx_set_property(0xff00, 0); /* tune initial frequency to remove tunestatus func err * sometimes occur tunestatus func err when execute tunestatus function * before to complete tune_freq. * so run tune_freq just after to complete booting sequence*/ ret = tune_freq(Si47xx_dev->settings.bottom_of_band); return ret; }
int main() { sf::RenderWindow window(sf::VideoMode(480,800), "SFML works!"); sf::Texture sky_texture; if (!sky_texture.loadFromFile("background.png",sf::IntRect(0,0,480,800))) return EXIT_FAILURE; sf::Sprite sky(sky_texture); sf::Texture player_texture; if (!player_texture.loadFromFile("shoot.png",sf::IntRect(0,100,103,133))) return EXIT_FAILURE; sf::Sprite player_sprite(player_texture); player_sprite.setPosition(sf::Vector2f(200, 600)); x=200; y=600; sf::Texture forpowerup; if (!forpowerup.loadFromFile("shoot.png",sf::IntRect(266,398,62,88))) return EXIT_FAILURE; sf::Sprite powerup(forpowerup); sf::Texture enemy_texture; if (!enemy_texture.loadFromFile("shoot.png",sf::IntRect(0,0,68,100))) return EXIT_FAILURE; sf::Sprite enemy_sprite(enemy_texture); sf::Texture destroy1; if (!destroy1.loadFromFile("shoot.png",sf::IntRect(532,650,68,100))) return EXIT_FAILURE; sf::Sprite spdestroy1(destroy1); sf::Texture destroy2; if (!destroy2.loadFromFile("shoot.png",sf::IntRect(605,650,68,100))) return EXIT_FAILURE; sf::Sprite spdestroy2(destroy2); sf::Texture destroy3; if (!destroy3.loadFromFile("shoot.png",sf::IntRect(670,650,68,100))) return EXIT_FAILURE; sf::Sprite spdestroy3(destroy3); sf::Texture destroy4; if (!destroy4.loadFromFile("shoot.png",sf::IntRect(740,650,68,100))) return EXIT_FAILURE; sf::Sprite spdestroy4(destroy4); sf::Texture you1; if (!you1.loadFromFile("shoot.png",sf::IntRect(166,236,103,120))) return EXIT_FAILURE; sf::Sprite dyou1(you1); sf::Texture you2; if (!you2.loadFromFile("shoot.png",sf::IntRect(330,626,103,120))) return EXIT_FAILURE; sf::Sprite dyou2(you2); sf::Texture you3; if (!you3.loadFromFile("shoot.png",sf::IntRect(330,500,103,120))) return EXIT_FAILURE; sf::Sprite dyou3(you3); sf::SoundBuffer bgm; if (!bgm.loadFromFile("game_music.ogg")) return -1; sf::Sound bgm1; bgm1.setBuffer(bgm); bgm1.play(); sf::SoundBuffer enemydown; if (!enemydown.loadFromFile("enemy1_down.ogg")) return -1; sf::Sound enemydown1; enemydown1.setBuffer(enemydown); sf::SoundBuffer _player_down; if (!_player_down.loadFromFile("youdown.ogg")) return -1; sf::Sound player_down; player_down.setBuffer(_player_down); sf::Texture player_bullet_texture; if (!player_bullet_texture.loadFromFile("shoot.png",sf::IntRect(69,78,10,22))) return -1; sf::Sprite player_bullet_sprite(player_bullet_texture); sf::Texture enemy_bullet_texture; if (!enemy_bullet_texture.loadFromFile("shoot.png",sf::IntRect(1002,990,10,22))) return -1; sf::Sprite enemy_bullet_sprite(enemy_bullet_texture); //¼ÓÔØ×ÖÌåÎļþ sf::Font font; if (!font.loadFromFile("score.ttf")) return -1; sf::Text showscore; showscore.setFont(font); showscore.setString(scorestr); showscore.setCharacterSize(40); showscore.setColor(sf::Color::White); sf::Text text; text.setFont(font); text.setString("Score"); text.setCharacterSize(40); text.setColor(sf::Color::White); sf::Text die; die.setFont(font); die.setCharacterSize(22); die.setString("You life:2/3,press Tab to continue"); die.setColor(sf::Color::White); sf::Text gg; gg.setFont(font); gg.setCharacterSize(40); gg.setString("GAME OVER"); gg.setColor(sf::Color::Red); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } window.draw(sky); if (youlive>0) { if (destroyyou==0) { if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)&&x<380) { player_sprite.move(.5,0); x+=0.5; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)&&x>0) { player_sprite.move(-.5,0); x-=0.5; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)&&y>0) { player_sprite.move(0,-.5); y-=0.5; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)&&y<660) { player_sprite.move(0,.5); y+=0.5; } if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space)) { bullet_f_control(); } window.draw(player_sprite); } for (i=1;i<=100;i++) { if (bullet_is[i]==1) { bullet_y[i]-=0.7; bullet_x[i]+=bullet_limit[i]*0.3; if (bullet_y[i]<0) bullet_is[i]=0; else { player_bullet_sprite.setPosition(bullet_x[i],bullet_y[i]); window.draw(player_bullet_sprite); } } } feplaneshot++; if (feplaneshot==enemy_occur_often(score)) { if (enemy_bullet_is[o]==0) { for (i=1;i<=100;i++) { if (enemy_exist[i]==1) { k++; if (k==3) { enemy_bullet_is[o]=1; enemy_bullet_x[o]=enemy_x[i]+32; enemy_bullet_y[o]=enemy_y[i]+100; enemy_bullet_length[o]=0; o++; k=1; } } } } if (o>=500) o=1; feplaneshot=1; } for (i=1;i<=500;i++) { if (enemy_bullet_is[i]==1) { enemy_bullet_y[i]+=0.4; enemy_bullet_x[i]+=enemy_bullet_length[i]*0.5; if (enemy_bullet_y[i]>800) enemy_bullet_is[i]=0; else { enemy_bullet_sprite.setPosition(enemy_bullet_x[i],enemy_bullet_y[i]); window.draw(enemy_bullet_sprite); } } } tforplane++; if (tforplane==enemy_occur_often(score)) { enemy_number++; if (enemy_exist[enemy_number]==0) { enemy_exist[enemy_number]=1; enemy_y[enemy_number]=0; enemy_x[enemy_number]=rand()%380; enemy_life[enemy_number]=1+score/100; } if (enemy_number==50) enemy_number=1; tforplane=1; } for (j=1;j<=50;j++) { if (enemy_exist[j]==1) { enemy_y[j]+=0.2; if (enemy_y[j]>800) enemy_exist[j]=0; else { enemy_sprite.setPosition(enemy_x[j],enemy_y[j]); window.draw(enemy_sprite); } } } for (i=1;i<=50;i++) for (j=1;j<=100;j++) { if (enemy_exist[i]==1&&bullet_is[j]==1&&enemy_y[i]<bullet_y[j]&&bullet_y[j]<enemy_y[i]+100&&enemy_x[i]<bullet_x[j]&&bullet_x[j]<enemy_x[i]+68) { enemy_life[i]--; bullet_is[j]=0; if (enemy_life[i]==0) { enemy_exist[i]=0; score+=10; sprintf(scorestr,"%d",score+score2); showscore.setString(scorestr); if (destroy==0) { destroyx=enemy_x[i]; destroyy=enemy_y[i]; destroy=1; } else { destroyxadd=enemy_x[i]; destroyyadd=enemy_y[i]; destroyadd=1; } } } } for (i=1;i<=50;i++) { if (enemy_exist[i]==1&&enemy_x[i]+18>x&&x+53>enemy_x[i]&&enemy_y[i]+70>y&&y+103>enemy_y[i]&&destroyyou==0) { youlive--; enemy_exist[i]=0; if (destroy==0) { destroyx=enemy_x[i]; destroyy=enemy_y[i]; destroy=1; } else { destroyxadd=enemy_x[i]; destroyyadd=enemy_y[i]; destroyadd=1; } destroyyou=1; destroyyoux=x; destroyyouy=y; } } for (i=1;i<=500;i++) { if (enemy_bullet_is[i]==1&&enemy_bullet_x[i]>x+31&&enemy_bullet_x[i]<x+71&&enemy_bullet_y[i]>y+37&&enemy_bullet_y[i]<y+97&&destroyyou==0) { youlive--; enemy_bullet_is[i]=0; destroyyou=1; destroyyoux=x; destroyyouy=y; } } if (destroyyou==1) { g++; if (g<=200) { dyou1.setPosition(destroyyoux,destroyyouy); window.draw(dyou1); player_down.play(); } if (g>200&&g<=400) { dyou2.setPosition(destroyyoux,destroyyouy); window.draw(dyou2); } if (g>400&&g<600) { dyou3.setPosition(destroyyoux,destroyyouy); window.draw(dyou3); } if (g>600) { die.setPosition(15,380); window.draw(die); if (sf::Keyboard::isKeyPressed(sf::Keyboard::Tab)) { player_sprite.setPosition(sf::Vector2f(200, 600));x=200;y=600; fuckpower=1; destroyyou=0; g=1; } } } if (destroy==1) { d++; if (d<=200) { spdestroy1.setPosition(destroyx,destroyy); window.draw(spdestroy1); enemydown1.play(); } if (d>200&&d<=400) { spdestroy2.setPosition(destroyx,destroyy);window.draw(spdestroy2);} if (d>400&&d<600) {spdestroy3.setPosition(destroyx,destroyy);window.draw(spdestroy3);} if (d>=600&&d<800) {spdestroy4.setPosition(destroyx,destroyy);window.draw(spdestroy4);} if (d==800) {d=1;destroy=0;} } if (destroyadd==1) { d2++; if (d2<=200) { spdestroy1.setPosition(destroyxadd,destroyyadd); window.draw(spdestroy1); enemydown1.play(); } if (d2>200&&d2<=400) { spdestroy2.setPosition(destroyxadd,destroyyadd); window.draw(spdestroy2); } if (d2>400&&d2<600) { spdestroy3.setPosition(destroyxadd,destroyyadd); window.draw(spdestroy3); } if (d2>=600&&d2<800) { spdestroy4.setPosition(destroyxadd,destroyyadd); window.draw(spdestroy4); } if (d2==800) { d2=1; destroyadd=0; } } text.setPosition(20,20); showscore.setPosition(50,60); window.draw(text); window.draw(showscore); } else { gg.setPosition(145,320); window.draw(gg); } window.display(); } return 0; }