void  NRF905::RX(char *TxRxBuffer)
{
    set_rx();			// Set nRF905 in Rx mode
    while (check_ready()==0);
    delay(1);
    RxPacket(TxRxBuffer);
    delay(1);
}
示例#2
0
/**
 * @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);
}
示例#3
0
//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;
}
示例#4
0
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);
}
示例#6
0
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
示例#7
0
 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_;
 }