Esempio n. 1
0
uint32_t ft_nf_ind_exe_cmd(uint8_t cmd[], uint8_t cmdnr, void *buf,
                           uint32_t size, uint32_t dir)
{
    bool ddrmode, dummy_rbb_en;
    uint16_t indirect_ctrl;

    ddrmode = NFI.flashIntfConfig.bits.nfif == 1;
    ddrmode = 0;

    switch (cmd[0]) {

    case NFC_CMD_GET_FEATURE:
    case NFC_CMD_READ_ID:
    case NFC_CMD_READ_STATUS:
        dummy_rbb_en = true;
        break;
    default:
        dummy_rbb_en = false;
        break;
    }

    ft_nf_prepare_cmd(cmd, ddrmode ? (size << 1) : size);
    indirect_ctrl = (dir == DIR_OUT) ? NFC_INDIRECT_OUT : 0;
    indirect_ctrl |= dummy_rbb_en ? 0 : NFC_INDIRECT_DUMMY_RBB;
    indirect_ctrl |= NFC_INDIRECT_ACCESS_START | (cmdnr -1);

    NFI.indirAcesConfig.all = indirect_ctrl;

    /* If dummy_rbb_en, need set dummy_rbb_en signal */
    if (dummy_rbb_en) {
        ft_udelay(10);
        NFI.indirAcesConfig.bits.dummy_RBB = 1;
    }

    if (size) {
        if (dir == DIR_OUT) {
            return push_data(buf, size, ddrmode);
        } else {
            if (wait_for_op_done())
                return -1;
            else
                return pop_data(buf, size, ddrmode);
        }
    }

    return 0;
}
Esempio n. 2
0
/*
** 'discard' removes an item from the Basic stack, carrying out any
** work needed to undo the effects of that item
*/
static void discard(stackitem item) {
  basicstring temp;
#ifdef DEBUG
  if (basicvars.debug_flags.stack) fprintf(stderr, "Drop '%s' entry at %p\n",
   entryname(item), basicvars.stacktop.bytesp);
#endif
  switch(item) {
  case STACK_STRTEMP:
    temp = pop_string();
    free_string(temp);
    break;
  case STACK_LOCAL: 	/* Restore local variable to its old value */
    restore(1);
    break;
  case STACK_RETPARM:	/* Deal with a 'return' parameter and restore local parameter */
    restore_retparm(1);
    break;
  case STACK_GOSUB:	/* Clear 'GOSUB' block from stack */
    (void) pop_gosub();
    break;
  case STACK_PROC:	/* Clear 'PROC' block */
    (void) pop_proc();
    break;
  case STACK_FN:	/* Clear 'FN' block */
    (void) pop_fn();
    break;
  case STACK_ERROR:	/* Restore old Basic error handler */
    basicvars.error_handler = pop_error();
    break;
  case STACK_DATA:	/* Restore old Basic data pointer */
    basicvars.datacur = pop_data();
    break;
  case STACK_LOCARRAY:	/* Local numeric array */
    basicvars.stacktop.bytesp+=entrysize[STACK_LOCARRAY]+basicvars.stacktop.locarraysp->arraysize;
    break;
  case STACK_LOCSTRING:	/* Local string array */
    discard_strings(basicvars.stacktop.bytesp+entrysize[STACK_LOCARRAY], basicvars.stacktop.locarraysp->arraysize);
    basicvars.stacktop.bytesp+=entrysize[STACK_LOCARRAY]+basicvars.stacktop.locarraysp->arraysize;
    break;
  default:
    if (item==STACK_UNKNOWN || item>=STACK_HIGHEST) error(ERR_BROKEN, __LINE__, "stack");
    basicvars.stacktop.bytesp+=entrysize[item];
  }
}
Esempio n. 3
0
// allocates space for copy of the first msg in 
int mtb_dequeue(int index,void **addr, size_t *ret_size){
  int ret = -1;
  *ret_size = 0;
  if(index >= _N_BUFFER || index < 0 ){ //buffer index check
    ret =  -1;
    //    printf("in %d %d %d\n",ret,index,_N_BUFFER);
  }
  else{
    pthread_mutex_lock(&(mtbs[index].mutex));
    int pop_size = pop_node_check_n_msg(index);
    if( pop_size > 0 ){
      char* msg;
      msg = malloc(pop_size);
      pop_data(index,msg,pop_size);
      *addr = msg; // copy msg pointer value to ret addr
      *ret_size = pop_size;
      ret = 1;
    }
    pthread_mutex_unlock(&(mtbs[index].mutex));
  }
  return ret;
}
Esempio n. 4
0
static ssize_t emd_dev_read(struct file *file, char *buf, size_t count, loff_t *ppos)
{
    emd_dev_client_t *client=(emd_dev_client_t *)file->private_data;
    int ret=0,size, data;

    WARN_ON(client==NULL);
    do{
        size=pop_data(client,&data);
        if( sizeof(int) == size){
            EMD_MSG_INF("chr","client%d get data:%08x, ret=%d\n", client->sub_dev_id, data, ret);
            if( copy_to_user(buf,&data,sizeof(int)) ){
                EMD_MSG_INF("chr","copy_to_user fialed\n");
                ret = -EFAULT;
                goto _OUT;
            }else{
                ret = size;
                goto _OUT;
            }
        }else{
            if (file->f_flags & O_NONBLOCK){
                ret = -EAGAIN;
                goto _OUT; 
            }else{
                ret = wait_event_interruptible(client->wait_q, !kfifo_is_empty(&client->fifo));
                if(ret == -ERESTARTSYS) {
                    EMD_MSG_INF("chr","Interrupted syscall.signal_pend=0x%llx\n",
                        *(long long *)current->pending.signal.sig);
                    ret = -EINTR;
                    goto _OUT;
                }
            }
        }
    }while(ret==0);
_OUT:
    return ret;
}
Esempio n. 5
0
 /* button handling using XFORM_DO
 */
int
handle_button( int button, WORD *msg )
{
    OBJECT *tree  = (OBJECT *)rs_trindex[GENERAL];
    int    done = FALSE;
    BOOLEAN  click_flag = FALSE;
    MRETS  mk;
    int    ox, oy;
       
    if( ( button != -1 ) && ( button & 0x8000 ) )
    {
      click_flag = TRUE;
      button &= 0x7FFF;
    }

    switch( button )
    {
       case GSAVE:   if( (*xcpb->XGen_Alert)( SAVE_DEFAULTS ) )
       		     {
       			 (*xcpb->CPX_Save)( &cur_value, sizeof( GEN ) );
       			 push_data();
       			 Set_Data();
       		     }
       		     XDeselect( tree, GSAVE );
       		     break;
       		     
       case GOK:     done = TRUE;
       		     Set_Data();
       		     Deselect( GOK );
       		     break;
       			
       case GCANCEL: done = TRUE;
       		     pop_data();
       		     Deselect( GCANCEL );
       		     break;
       
       case STATUS:  graf_mkstate( &mk.x, &mk.y, &mk.buttons, &mk.kstate );
       		     if( objc_find( tree, ROOT, MAX_DEPTH, mk.x, mk.y ) == STATUS )
       		         do_status();
       		     break;
       		     
       case BELL:    keybell_handle( BELLICON, &cur_value.bell );
       		     break;
       		     
       case KEYCLICK:keybell_handle( KEYICON, &cur_value.keyclick );
       		     break;
       		     
       case M0:
       case M1:
       case M2:
       case M3:
       case M4:	     Dclick_Select( button );
       		     break;
       		     
       case DOUBLE:  Dclick_Handle( click_flag, button );
        	     break;

       	case KREPEAT:   (*xcpb->MFsave )( MFSAVE, &Other );
       			if( AES_Version >= 0x0320 )
       			    graf_mouse( FLAT_HAND, 0L );


		        if(( AES_Version >= 0x0330 )
	      		    && ( numcol > LWHITE ) )
	     		    XSelect( tree, KREPEAT );

		        graf_mkstate( &ox, &mk.y, &mk.buttons, &mk.kstate );
	  		do
	  		{
	     		   graf_mkstate( &mk.x, &mk.y, &mk.buttons, &mk.kstate );
	  		}while( mk.buttons && ( mk.x == ox ));

			if( mk.buttons && ( mk.x != ox ))
			{
       			   (*xcpb->Sl_dragx)( tree, REPTBASE, KREPEAT, KEYMIN,
       					      KEYMAX, &cur_value.repeat,
       	                                      KRepeat );
       	                   Set_Kbrate();
			}
			
          		if(( AES_Version >= 0x0330 )
	       		     && ( numcol > LWHITE ) )
	     		     XDeselect( tree, KREPEAT );
       	                
       	                (*xcpb->MFsave)( MFRESTORE, &Other );
       			break;
 	       					
       	case KRESPONS:  (*xcpb->MFsave)( MFSAVE, &Other );
       			if( AES_Version >= 0x0320 )
       			    graf_mouse( FLAT_HAND, 0L );
       			    
		        if(( AES_Version >= 0x0330 )
	      		    && ( numcol > LWHITE ) )
	     		    XSelect( tree, KRESPONS );

		        graf_mkstate( &ox, &mk.y, &mk.buttons, &mk.kstate );
	  		do
	  		{
	     		   graf_mkstate( &mk.x, &mk.y, &mk.buttons, &mk.kstate );
	  		}while( mk.buttons && ( mk.x == ox ));

			if( mk.buttons && ( mk.x != ox ))
			{
       			   (*xcpb->Sl_dragx)( tree, RESPBASE, KRESPONS, KEYMIN,
       					      KEYMAX, &cur_value.response,
       	                                      KResponse );
       	                   Set_Kbrate();                  
			}
			
          		if(( AES_Version >= 0x0330 )
	       		     && ( numcol > LWHITE ) )
	     		     XDeselect( tree, KRESPONS );

       	                (*xcpb->MFsave)( MFRESTORE, &Other );
       			break;
       			
       	case RRESP:     (*xcpb->Sl_arrow)( tree, RESPBASE, KRESPONS, RRESP,
       	                                  1, KEYMIN, KEYMAX,
       	                                  &cur_value.response, HORIZONTAL,
       	                                  KResponse );
       	                Set_Kbrate();
       	 		break;
 	       	
       	case LRESP:     (*xcpb->Sl_arrow)( tree, RESPBASE, KRESPONS, LRESP,
       	                                  -1, KEYMIN, KEYMAX,
       	                                  &cur_value.response, HORIZONTAL,
       	                                  KResponse );
       	                Set_Kbrate();
       			break;
 	       	
       	case RREPEAT:   (*xcpb->Sl_arrow)( tree, REPTBASE, KREPEAT, RREPEAT,
       	                                  1, KEYMIN, KEYMAX,
       	                                  &cur_value.repeat, HORIZONTAL,
       	                                  KRepeat );
       	                Set_Kbrate();
       			break;
 	       	
       	case LREPEAT:   (*xcpb->Sl_arrow)( tree, REPTBASE, KREPEAT, LREPEAT,
       	                                  -1, KEYMIN, KEYMAX,
       	                                  &cur_value.repeat, HORIZONTAL,
       	                                  KRepeat );
       	                Set_Kbrate();
       			break;

	case REPTBASE:  Graf_mkstate( &mk );
			objc_offset( tree, KREPEAT, &ox, &oy );
			oy = (( mk.x < ox ) ? ( -3 ) : ( 3 ) );
       			(*xcpb->Sl_arrow)( tree, REPTBASE, KREPEAT, -1,
       			                  oy, KEYMIN, KEYMAX,
       			                  &cur_value.repeat, HORIZONTAL,
       			                  KRepeat );
       			Set_Kbrate();
  			break;
			
	case RESPBASE:  Graf_mkstate( &mk );
			objc_offset( tree, KRESPONS, &ox, &oy );
			oy = (( mk.x < ox ) ? ( -3 ) : ( 3 ));
       			(*xcpb->Sl_arrow)( tree, RESPBASE, KRESPONS, -1,
       			                  oy, KEYMIN, KEYMAX,
       			                  &cur_value.response, HORIZONTAL,
       			                  KResponse );
       			Set_Kbrate();
			break;
			

	case BLK1BUTT:  Do_Speed();
			break;
			
	case BLK2BUTT:  Do_Block2();
        		
	default:	if( button == -1 )
  			{
     			   switch( msg[0] )
     			   {
     			     case WM_REDRAW: Redraw_Objects();
     			     		     break;
     			     		     
     			     case AC_CLOSE:  done = TRUE;
     			     		     pop_data();	
     			     		     break;
     			     		     
     			     case WM_CLOSED: done = TRUE;
     			     		     Set_Data();
					     break;
     			     default:
     			     		break;
     			   }
     			}
     			break;
    }
    return( done );
}
Esempio n. 6
0
/* cpx_call()
 *==========================================================================
 * Execute the cpx using Xform_do
 */
BOOLEAN
cdecl cpx_call( GRECT *rect )
{
     int button;
     int quit = 0;
     OBJECT *tree  = (OBJECT *)rs_trindex[PRINTER];
     WORD   msg[8];
     GRECT  xrect;
     
     ObX( ROOT ) = rect->g_x;
     ObY( ROOT ) = rect->g_y;
     set_objects();
     Objc_draw( tree, ROOT, MAX_DEPTH, NULL );
     do
     {
	button = (*xcpb->Xform_do)( tree, 0, msg );
     	switch( button )
     	{
     		case PSAVE:	if( (*xcpb->XGen_Alert)( SAVE_DEFAULTS ) )
     				{
     		 		   (*xcpb->CPX_Save)( &cur_value, sizeof( PRT ) );
     		 		   push_data();
     		 		   Set_Printer( &cur_value );
     		 		}
     		 		Deselect( PSAVE );
     		 		xrect = ObRect( PSAVE );
     		 		objc_offset( tree, PSAVE, &xrect.g_x, &xrect.g_y );
     		 		xrect.g_x -= 2;
     		 		xrect.g_y -= 2;
     		 		xrect.g_w += 4;
     		 		xrect.g_h += 4;
     		 		Objc_draw( tree, PSAVE, MAX_DEPTH, &xrect );
#if 0     		 		   
     				deselect( tree, PSAVE );
#endif     				
     				break;
     				
     		case POK:	quit = POK;
     				Set_Printer( &cur_value );
     				Deselect( POK );
     				break;
     						
     		case PCANCEL:	quit = PCANCEL;
     				pop_data();
     				Deselect( PCANCEL );
     				break;




#if GERMAN
		case PTYPE:	Pop_Handle( PTYPE, type_array, 2, &cur_value.cur_type, IBM, 11 );
				break;
#endif

#if FRENCH | SPAIN | SWEDEN | ITALY
		case PTYPE:	Pop_Handle( PTYPE, type_array, 2, &cur_value.cur_type, IBM, 10 );
				break;
#endif				


#if USA | UK
		case PTYPE:	Pop_Handle( PTYPE, type_array, 2, &cur_value.cur_type, IBM, 8 );
				break;
#endif     






#if FRENCH     				
     		case COLOR:	Pop_Handle( COLOR, color_array, 2, &cur_value.cur_color, IBM, 10 );
     				break;
#endif

#if ITALY
     		case COLOR:	Pop_Handle( COLOR, color_array, 2, &cur_value.cur_color, IBM, 9 );
				break;
#endif				

#if USA | UK | SPAIN | GERMAN | SWEDEN
     		case COLOR:	Pop_Handle( COLOR, color_array, 2, &cur_value.cur_color, IBM, 8 );
     				break;
#endif



		case PIXLINE:	Pop_Handle( PIXLINE, pix_array, 2, &cur_value.cur_pixel, IBM, 8 );
     				break;






#if GERMAN | FRENCH | ITALY
		case QUALITY:	Pop_Handle( QUALITY, quality_array, 2, &cur_value.cur_quality, IBM, 10 );
     				break;
#endif

#if SWEDEN
		case QUALITY:	Pop_Handle( QUALITY, quality_array, 2, &cur_value.cur_quality, IBM, 9 );
				break;
#endif

#if USA | UK | SPAIN
		case QUALITY:	Pop_Handle( QUALITY, quality_array, 2, &cur_value.cur_quality, IBM, 8 );
     				break;
#endif     						


#if ITALY
		case PAPER:	Pop_Handle( PAPER, paper_array, 2, &cur_value.cur_paper, IBM, 10 );
				break;
#endif
				
#if USA | UK | SPAIN | GERMAN | FRENCH
		case PAPER:	Pop_Handle( PAPER, paper_array, 2, &cur_value.cur_paper, IBM, 9 );
     				break;
#endif

#if SWEDEN
		case PAPER:	Pop_Handle( PAPER, paper_array, 2, &cur_value.cur_paper, IBM, 8 );
				break;
#endif




#if ITALY
     		case PORT:	Pop_Handle( PORT, port_array, 2, &cur_value.cur_port, IBM, 9 );
     				break;
#else
     		case PORT:	Pop_Handle( PORT, port_array, 2, &cur_value.cur_port, IBM, 10 );
     				break;
#endif
     		default:	if( button == -1 )
     				{
     				   switch( msg[0] )
     				   {
     				     case WM_REDRAW: Redraw_Objects();
     				     		     break;
     				     		     
     				     case AC_CLOSE:  quit = PCANCEL;
     				     		     pop_data();
     				     		     break;
     				     		     
     				     case WM_CLOSED: quit = POK;
     				     		     Set_Printer( &cur_value );
						     break;
     				     default:
     				     		break;
     				   }
     				}
				break;
     		
     	}
     }while( !quit);
     
     return( FALSE );
}
Esempio n. 7
0
/* cpx_call()
 *==========================================================================
 * Execute the cpx using Xform_do()
 */
BOOLEAN
cdecl cpx_call( GRECT *rect )
{
     int button;
     int quit = 0;
     OBJECT *tree  = (OBJECT *)rs_trindex[RS232];
     WORD msg[8];
     int  temp;
     int  temp_port;
     long filesize;
     char *a,*b;
     GRECT xrect;
                    
     set_objects( cur_port );

     if( IsSTE() )
     {
        a = port_array[ PORT_C ];
        b = port_array[ PORT_D ];
        strcpy( a, b );
     }
     
     ObX( ROOT ) = rect->g_x;
     ObY( ROOT ) = rect->g_y;
     Objc_draw( tree, ROOT, MAX_DEPTH, NULL );
     do
     {
	button = (*xcpb->Xform_do)( tree, 0, msg );
     	switch( button )
     	{
     				/* if on a TT, we write out structure for 4 ports
     				 * but on an ST/STE/Mega, we write out just ONE!
     				 * And on a MEGA STE, we write out 3
     				 */
     		case SAVE:	if( (*xcpb->XGen_Alert)( SAVE_DEFAULTS ) )
     				{
				    filesize = sizeof( MDEFAULT );
				    (*xcpb->CPX_Save)( &Modem, filesize );			            
			            Select_Ok();
			        }
			        Deselect( SAVE );
			        xrect = ObRect( SAVE );
			        objc_offset( tree, SAVE, &xrect.g_x, &xrect.g_y );
			        xrect.g_x -= 2;
			        xrect.g_y -= 2;
			        xrect.g_w += 4;
			        xrect.g_h += 4;
			        Objc_draw( tree, SAVE, MAX_DEPTH, &xrect );
#if 0			            
     				deselect( tree, SAVE );
#endif     				
     				break;
     				
     		case RS232OK:	quit = RS232OK;
     				Select_Ok();
     				Deselect( RS232OK );
     				break;
     						
     		case RS232CAN:	quit = RS232CAN;
     				pop_data();
     				Deselect( RS232CAN );
     				break;
     						
     		case BAUD:	Pop_Handle( BAUD, baud_array, 16, &Modem.modem[ cur_port ].cur_baud, IBM, 8 );
     				break;
     						
		case FLOW:	Pop_Handle( FLOW, flow_array, 3, &Modem.modem[ cur_port ].cur_flow, IBM, 11 );
				break;

#if FRENCH | ITALY
		case PARITY:    Pop_Handle( PARITY, parity_array, 3, &Modem.modem[ cur_port ].cur_parity, IBM, 10 );
				break;
#endif

#if GERMAN				
		case PARITY:    Pop_Handle( PARITY, parity_array, 3, &Modem.modem[ cur_port ].cur_parity, IBM, 11 );
				break;
#endif
				
#if USA | UK | SPAIN | SWEDEN
		case PARITY:    Pop_Handle( PARITY, parity_array, 3, &Modem.modem[ cur_port ].cur_parity, IBM, 8 );
				break;
#endif
				
		case BITSCHAR:	Pop_Handle( BITSCHAR, bits_array, 4, &Modem.modem[ cur_port ].cur_bits, IBM, 8 );
				break;
				
		case STOPX:	if( !Modem.modem[ cur_port ].cur_stop )
				   Pop_Handle( STOPX, stop_array, 4, &Modem.modem[ cur_port ].cur_stop, IBM, 8 );
				else
				{ 
				   temp = Modem.modem[ cur_port ].cur_stop;
				   temp -= 1;
				   Pop_Handle( STOPX, &stop_array[1], 3, &temp, IBM, 8 );
				   Modem.modem[ cur_port ].cur_stop = temp + 1;
				}   
				break;
				
		case PORT:	if( !IsDisabled( PORT ) )
				{
				   /* Select number of ports based on 
				    * LAN TT and MEGA STE
				    * If on TT the LAN
				    * is ACTIVE AND we are using CHANNEL A,
				    * then set port to ST SERIAL using
				    * Bconmap call.
				    *
				    * For the Popup, we set the number of ports and also
				    * the default 'old_port' which is set by Set_Active_Port()
				    
				    */
				   temp_port = Get_Active_Port();
				   Modem.cur_port = Set_Active_Port( temp_port );
				   
				   Pop_Handle( PORT, port_array, Num_Ports, &old_port, IBM, 11 );
				   if( old_port != cur_port )
				   {
				     cur_port = old_port;
				     Modem.cur_port = Set_Active_Port( cur_port );
				     set_objects( cur_port );
				     Objc_draw( tree, BAUD, 0, NULL );
				     Objc_draw( tree, FLOW, 0, NULL );
				     Objc_draw( tree, PARITY, 0, NULL );
				     Objc_draw( tree, BITSCHAR, 0, NULL );	   
				     Objc_draw( tree, STOPX, 0, NULL );
				   }
				}
				break;
								
     		default:	if( button == -1 )
     				{
     				   switch( msg[0] )
     				   {
     				     case WM_REDRAW: Redraw_Objects();
     				     		     break;

     				     case AC_CLOSE:  quit = RS232CAN;
     				     		     pop_data();
						     break;
						     
     				     case WM_CLOSED: quit = RS232OK;
     				     		     Select_Ok();
						     break;
     				     default:
     				     		break;
     				   }
     				}
     				break;
     	}
     }while( !quit);
     
     return( FALSE );
}