void NRF905::RX(char *TxRxBuffer) { set_rx(); // Set nRF905 in Rx mode while (check_ready()==0); delay(1); RxPacket(TxRxBuffer); delay(1); }
/** * @param none */ void nRF905_rxData(void) { /* Set nRF905 in Rx mode */ set_rx(); while (check_ready()==0); nrf_delay_ms(10); RxPacket(); nrf_delay_ms(10); }
//for now we don't know whether creating python class instance will do write to the class object, then no mutex used, we will check this in detail in the later time // int create_ins(void){ int ret = -1; PyObject *pargs=NULL; #if PY_DEBUG fprintf(stderr,"I am here %s\n",__FUNCTION__); #endif if(!check_ready()){ if(!check_and_set_ready()){ goto create_ins_error; } } pargs = PyTuple_New(1); if(!pargs){ #if PY_DEBUG fprintf(stderr,"we cannot create the first tuple\n"); #endif goto create_ins_error; } PyTuple_SetItem(pargs,0,Py_BuildValue("s",replica_group)); #if PY_DEBUG fprintf(stderr,"%p\n",pclass); #endif pins = PyInstance_New(pclass,pargs,NULL); if(!pins){ #if PY_DEBUG fprintf(stderr,"we cannot create the instance\n"); #endif goto create_ins_error; } if(PyInstance_Check(pins)){ #if PY_DEBUG fprintf(stderr,"Sure, We have created an instance\n"); #endif }else{ goto create_ins_error; } ret = 0; goto create_ins_exit; create_ins_error: if(NULL!=pins){Py_DECREF(pins);pins=NULL;}; create_ins_exit: if(NULL!=pargs){Py_DECREF(pargs);pargs=NULL;}; return ret; }
int main() { JCB *pr, *tmp; SIZE = sizeof(JCB); memory = 100; tape = 5; wait = getjcb; ready = getjcb; running = getjcb; wait->next = NULL; ready->next = NULL; running->next = NULL; input(); printf("\n\n 进程 \t 开始时刻 \t 完成时刻 \t 周转时间 \t 带权周转时间\n"); while (wait->next != NULL || ready->next != NULL || running->next != NULL) { CPU_TIME++; check_ready(); // 从就绪队列中按顺序查找可以分配资源的作业插入运行队列队尾 pr = ready; while (pr->next != NULL) { // 能够分配资源的 if (pr->next->m_count <= memory && pr->next->t_count <= tape) { tmp = pr->next; pr->next = tmp->next; memory -= tmp->m_count; tape -= tmp->t_count; tmp->next = running->next; running->next = tmp; } else { pr = pr->next; } } if (running->next != NULL) { run(); } } return 0; }
void NRF905::RX(char *TxRxBuf, char *RxAddress) //receive and change own address { if(config_info_buf[5] != RxAddress[0] ||\ config_info_buf[6] != RxAddress[1] ||\ config_info_buf[7] != RxAddress[2] ||\ config_info_buf[8] != RxAddress[3]){ config_info_buf[5] = RxAddress[0]; config_info_buf[6] = RxAddress[1]; config_info_buf[7] = RxAddress[2]; config_info_buf[8] = RxAddress[3]; write_config(config_info_buf); } set_rx(); // Set nRF905 in Rx mode while (check_ready()==0); delay(1); RxPacket(TxRxBuf); delay(1); }
void menuUp1(uint8_t event) { FRESULT fr ; struct fileControl *fc = &FileControl ; static uint8_t mounted = 0 ; static uint32_t state ; static uint32_t firmwareAddress ; uint32_t i ; uint32_t width ; if (UpdateItem == UPDATE_TYPE_BOOTLOADER ) // Bootloader { TITLE( "UPDATE BOOT" ) ; } else { #ifdef PCBX9D if (UpdateItem == UPDATE_TYPE_SPORT_INT ) { TITLE( "UPDATE Int. XJT" ) ; } else { TITLE( "UPDATE Ext. SPort" ) ; } #endif #ifdef PCBSKY #ifndef REVX if (UpdateItem == UPDATE_TYPE_COPROCESSOR ) { TITLE( "UPDATE COPROC" ) ; } else { TITLE( "UPDATE SPort" ) ; } #else if (UpdateItem == UPDATE_TYPE_SPORT_EXT ) { TITLE( "UPDATE SPort" ) ; } #endif #endif } switch(event) { case EVT_ENTRY: state = UPDATE_NO_FILES ; if ( mounted == 0 ) { #if defined(PCBTARANIS) fr = f_mount(0, &g_FATFS_Obj) ; #else fr = f_mount(0, &g_FATFS) ; #endif #ifdef PCBX9D unlockFlash() ; #endif } else { fr = FR_OK ; } if ( fr == FR_OK) { mounted = 1 ; } if ( mounted ) { fr = f_chdir( (TCHAR *)"\\firmware" ) ; if ( fr == FR_OK ) { state = UPDATE_NO_FILES ; fc->index = 0 ; fr = f_opendir( &Dj, (TCHAR *) "." ) ; if ( fr == FR_OK ) { if ( (UpdateItem > 1 ) ) { fc->ext[0] = 'F' ; fc->ext[1] = 'R' ; fc->ext[2] = 'K' ; } else { fc->ext[0] = 'B' ; fc->ext[1] = 'I' ; fc->ext[2] = 'N' ; } fc->ext[3] = 0 ; fc->index = 0 ; fc->nameCount = fillNames( 0, fc ) ; fc->hpos = 0 ; fc->vpos = 0 ; if ( fc->nameCount ) { state = UPDATE_FILE_LIST ; } } } } break ; case EVT_KEY_FIRST(KEY_EXIT): if ( state < UPDATE_ACTION ) { chainMenu(menuUpdate) ; killEvents(event) ; } break ; } switch ( state ) { case UPDATE_NO_FILES : lcd_puts_Pleft( 4*FH, "\005No Files" ) ; lcd_outdez( 21*FW, 4*FH, mounted ) ; break ; case UPDATE_FILE_LIST : SportVerValid = 0 ; if ( fileList( event, &FileControl ) == 1 ) { state = UPDATE_CONFIRM ; } break ; case UPDATE_CONFIRM : if ( (UpdateItem > UPDATE_TYPE_BOOTLOADER ) ) { #ifdef PCBX9D if ( (UpdateItem == UPDATE_TYPE_SPORT_INT ) ) { lcd_puts_Pleft( 2*FH, "Flash Int. XJT from" ) ; } else { lcd_puts_Pleft( 2*FH, "Flash Ext.SP from" ) ; } SportVerValid = 0 ; #else #ifndef REVX if ( (UpdateItem == UPDATE_TYPE_COPROCESSOR ) ) { lcd_puts_Pleft( 2*FH, "Flash Co-Proc. from" ) ; } else { lcd_puts_Pleft( 2*FH, "Flash SPort from" ) ; } CoProcReady = 0 ; #else lcd_puts_Pleft( 2*FH, "Flash SPort from" ) ; #endif #endif } else { lcd_puts_Pleft( 2*FH, "Flash Bootloader from" ) ; } cpystr( cpystr( (uint8_t *)FlashFilename, (uint8_t *)"\\firmware\\" ), (uint8_t *)Filenames[fc->vpos] ) ; #if defined(PCBTARANIS) lcd_putsnAtt( 0, 4*FH, Filenames[fc->vpos], DISPLAY_CHAR_WIDTH, 0 ) ; #else lcd_putsnAtt0( 0, 4*FH, Filenames[fc->vpos], DISPLAY_CHAR_WIDTH, 0 ) ; #endif if ( event == EVT_KEY_LONG(KEY_MENU) ) { state = UPDATE_SELECTED ; } if ( event == EVT_KEY_LONG(KEY_EXIT) ) { state = UPDATE_FILE_LIST ; // Canceled } break ; case UPDATE_SELECTED : f_open( &FlashFile, FlashFilename, FA_READ ) ; f_read( &FlashFile, (BYTE *)FileData, 1024, &BlockCount ) ; i = 1 ; if (UpdateItem == UPDATE_TYPE_BOOTLOADER ) // Bootloader { i = validateFile( (uint32_t *) FileData ) ; } if ( i == 0 ) { state = UPDATE_INVALID ; } else { if (UpdateItem == UPDATE_TYPE_BOOTLOADER ) // Bootloader { #ifdef PCBX9D firmwareAddress = 0x08000000 ; #endif #ifdef PCBSKY firmwareAddress = 0x00400000 ; #endif } #ifdef PCBSKY #ifndef REVX else if (UpdateItem == UPDATE_TYPE_COPROCESSOR ) // Bootloader { firmwareAddress = 0x00000080 ; if ( check_ready() == 0 ) { CoProcReady = 1 ; } } #endif #endif else { // SPort update SportState = SPORT_START ; FirmwareSize = FileSize[fc->vpos] ; BlockInUse = 0 ; f_read( &FlashFile, (BYTE *)ExtraFileData, 1024, &XblockCount ) ; } BytesFlashed = 0 ; BlockOffset = 0 ; ByteEnd = 1024 ; state = UPDATE_ACTION ; } break ; case UPDATE_INVALID : lcd_puts_Pleft( 2*FH, "Invalid File" ) ; lcd_puts_Pleft( 4*FH, "Press EXIT" ) ; if ( event == EVT_KEY_FIRST(KEY_EXIT) ) { state = UPDATE_FILE_LIST ; // Canceled killEvents(event) ; } break ; case UPDATE_ACTION : // Do the flashing lcd_puts_Pleft( 3*FH, "Flashing" ) ; if (UpdateItem == UPDATE_TYPE_BOOTLOADER ) // Bootloader { width = ByteEnd >> 9 ; if ( BytesFlashed < ByteEnd ) { program( (uint32_t *)firmwareAddress, &((uint32_t *)FileData)[BlockOffset] ) ; // size is 256 bytes BlockOffset += 64 ; // 32-bit words (256 bytes) firmwareAddress += 256 ; BytesFlashed += 256 ; } else { if ( ByteEnd >= 32768 ) { state = UPDATE_COMPLETE ; } else { f_read( &FlashFile, (BYTE *)FileData, 1024, &BlockCount ) ; ByteEnd += 1024 ; BlockOffset = 0 ; } } } #ifdef PCBSKY #ifndef REVX else if (UpdateItem == UPDATE_TYPE_COPROCESSOR ) // CoProcessor
std::vector<Search::TetrisNodeWithTSpinType> const *Search::search_t(TetrisMap const &map, TetrisNode const *node) { TetrisMapSnap snap; node->build_snap(map, context_, snap); bool allow_180 = config_->allow_180; node_search_.push_back(node); node_mark_.mark(node); node_incomplete_.clear(); size_t cache_index = 0; do { for(size_t max_index = node_search_.size(); cache_index < max_index; ++cache_index) { node = node_search_[cache_index]; if(!node->move_down || !node->move_down->check(snap)) { if(node_mark_filtered_.mark(node)) { node_incomplete_.push_back(node); } } //d if(node->move_down && node_mark_.set(node->move_down, node, ' ') && node->move_down->check(snap)) { node_search_.push_back(node->move_down); } //l if(node->move_left && node_mark_.set(node->move_left, node, ' ') && node->move_left->check(snap)) { node_search_.push_back(node->move_left); } //r if(node->move_right && node_mark_.set(node->move_right, node, ' ') && node->move_right->check(snap)) { node_search_.push_back(node->move_right); } if(allow_180) { //x for(TetrisNode const *wall_kick_node : node->wall_kick_opposite) { if(wall_kick_node) { if(wall_kick_node->check(snap)) { if(node_mark_.cover(wall_kick_node, node, 'x')) { node_search_.push_back(wall_kick_node); } break; } } else { break; } } } //z for(TetrisNode const *wall_kick_node : node->wall_kick_counterclockwise) { if(wall_kick_node) { if(wall_kick_node->check(snap)) { if(node_mark_.cover(wall_kick_node, node, 'z')) { node_search_.push_back(wall_kick_node); } break; } } else { break; } } //c for(TetrisNode const *wall_kick_node : node->wall_kick_clockwise) { if(wall_kick_node) { if(wall_kick_node->check(snap)) { if(node_mark_.cover(wall_kick_node, node, 'c')) { node_search_.push_back(wall_kick_node); } break; } } else { break; } } } } while(node_search_.size() > cache_index); for(auto const &node : node_incomplete_) { auto last = node_mark_.get(node); TetrisNodeWithTSpinType node_ex(node); node_ex.last = last.first; node_ex.is_check = true; node_ex.is_last_rotate = last.second != ' '; node_ex.is_ready = check_ready(map, node); node_ex.is_mini_ready = check_mini_ready(snap, node_ex); land_point_cache_.push_back(node_ex); } return &land_point_cache_; }