예제 #1
0
void
parse_message(unsigned char type, char *buf, int size)
{
    char *msgt;
    int i;
    struct iocblk *iocp;
    struct buffer *bp = Pty.inbuff;


    if (size != 0) {
	switch (Pty.state) {
	case PTY_CLOSED:
	case PTY_OPERRONLY:
	    SET_EVENT(EV_UP, EV_UPOPEN, 0, 0);
	    break;
	}
    }

    if (type == TIOCPKT_DATA) {
# ifdef TSR_MEASURE
	devreads++;
	devrbytes += size;
# endif
	if (size == 0) {
	    SET_EVENT(EV_UP, EV_UPCLOSE, 0, 0);
	}
	else {
	    COPY_TO_BUFFER(bp, buf, size);
	    SET_EVENT(EV_UP, EV_UPDATA, 0, 0);
	}
    }
    else {
	parse_packet((int) type);
    }
}
예제 #2
0
int
comport_command(int command, int arg)
{
    int size;
    int ret;
    unsigned char *obp;

    if (Nvt.comport->support == FALSE) {
	CLR_CMD_ACTIVE(command);	/* Synchronous operation */
	SET_EVENT(EV_RN, EV_RNCMDOK, 0, 0);
	return (0);
    }

    obp = &Comobuf[0];

    *obp++ = IAC;
    *obp++ = SB;
    *obp++ = NVT_COM_PORT_OPTION;
    *obp++ = (unsigned char) command;
    switch (command) {
    case USR_COM_SET_BAUDRATE:
	SET_VALUE_4(obp, arg);
	obp += 4;
	break;
    default:
	SET_VALUE_1(obp, arg);
	obp += 1;
	break;
    }
    *obp++ = IAC;
    *obp++ = SE;

    size = (int) (obp - &Comobuf[0]);
    obp = &Comobuf[0];

    if (Debug > 2) {
	sysmessage(MSG_DEBUG,
		   "Sock_write, %d bytes: %02X %02X %02X %02X %02X %02X %02X %02X\n",
		   size, Comobuf[0], Comobuf[1], Comobuf[2], Comobuf[3],
		   Comobuf[4], Comobuf[5], Comobuf[6], Comobuf[7]);
    }
    while (size) {
	if ((ret = sock_write(obp, size)) == -1) {
	    SET_EVENT(EV_RN, EV_RNHANG, 0, 0);
	    return (-1);
	}
	else if (ret != size) {
	    sysmessage(MSG_NOTICE,
		       "Partial write in send_comport: %d/%d\n", ret, size);
	    sysdelay(ROOM_DELAY);	/* Wait for room */
	}
	size -= ret;
	obp += ret;
    }
    return (0);
}
예제 #3
0
void
parse_message(unsigned char type, char *buf, int size)
{
    char *msgt;
    int i;
    struct iocblk *iocp;
    struct buffer *bp = Pty.inbuff;


    print_msg(type, (unsigned char *) buf, size);

    if (size > 0) {
	switch (Pty.state) {
	case PTY_CLOSED:
	case PTY_OPERRONLY:
	    SET_EVENT(EV_UP, EV_UPOPEN, 0, 0);
	    break;
	}
    }
    else if (size == -1) {
	sysmessage(MSG_WARNING, "PARSE: Message data size == -1 \n");
	return;
    }

    switch (type) {
    case M_DATA:
# ifdef TSR_MEASURE
	devreads++;
	devrbytes += size;
# endif
	if (size == 0) {
	    SET_EVENT(EV_UP, EV_UPCLOSE, 0, 0);
	}
	else {
	    COPY_TO_BUFFER(bp, buf, size);
	    SET_EVENT(EV_UP, EV_UPDATA, 0, 0);
	}
	break;

    case M_IOCTL:
	iocp = (struct iocblk *) &buf[0];
	parse_ioctl(iocp->ioc_cmd, (void *) &buf[sizeof(struct iocblk)]);
	break;

    case M_FLUSH:
	parse_msgflush((int) buf[0]);
	break;

    default:
	sysmessage(MSG_DEBUG, "Unsupported stream message: %d\n", type);
	print_msg(type, (unsigned char *) buf, size);
	break;
    }
}
예제 #4
0
static void acc_cb(int x, int y, int z, int tap) {
	vmVariables.acc[0] = x;
	vmVariables.acc[1] = y;
	vmVariables.acc[2] = z;	
	if(tap) {
		SET_EVENT(EVENT_TAP);
		vmVariables.acc_tap = tap; // set only variable.
	}
	
	SET_EVENT(EVENT_ACC);
}
예제 #5
0
void
send_option(int type, int opt)
{
    int ret;
    int size;
    unsigned char *obp;

    obp = &Comobuf[0];

    *obp++ = IAC;
    *obp++ = type;
    *obp++ = opt;

    size = 3;
    obp = &Comobuf[0];

    if (Debug > 2) {
	sysmessage(MSG_DEBUG, "Sock_write, 3 bytes: %02X %02X %02X\n",
		   Comobuf[0], Comobuf[1], Comobuf[2]);
    }

    while (size) {
	if ((ret = sock_write(obp, size)) == -1) {
	    SET_EVENT(EV_RN, EV_RNHANG, 0, 0);
	    break;
	}
	else if (ret != size) {
	    sysmessage(MSG_NOTICE,
		       "Partial write in send_option: %d/%d\n", ret, size);
	    sysdelay(ROOM_DELAY);	/* Wait for room */
	}
	size -= ret;
	obp += ret;
    }
}
예제 #6
0
void
parse_termios(int mode, struct termios *tp)
{
    struct iocontrol *iocp = &Pty.iocontrol;
    struct portconfig *pcp = &iocp->io_portconfig;

    switch (mode) {
    case TCSETS:
	iocp->io_oper = OP_SETNOW;
	break;
    case TCSETSW:
	iocp->io_oper = OP_SETWAIT;
	break;
    case TCSETSF:
	iocp->io_oper = OP_SETFLUSH;
	break;
    }

    Pty.portmodes = termios_to_portmodes(tp);

    memset((void *) pcp, 0, sizeof(struct portconfig));

    termios_to_portconfig(tp, pcp);

    SET_EVENT(EV_UP, EV_UPCONTROL, 0, 0);
}
예제 #7
0
static void ntc_callback(int temp) {
	if(!ntc_calib) {
		vmVariables.ntc = temp;
		SET_EVENT(EVENT_TEMPERATURE);
	}
	rc5_enable();
}
예제 #8
0
파일: Event.c 프로젝트: chregubr85/42
void EVNT_SetEvent(EVNT_Handle event) {
  CS1_CriticalVariable()

  CS1_EnterCritical();
  SET_EVENT(event);
  CS1_ExitCritical();
}
// This function must update the accelerometer variables
void accelerometer_cb(void)
{
    static float accf[3];
    demo_acc_get_acc(accf);
    vmVariables.acc[0] = (sint16) accf[0];
    vmVariables.acc[1] = (sint16) accf[1];
    vmVariables.acc[2] = (sint16) accf[2];
    SET_EVENT(EVENT_ACC);
}
예제 #10
0
void
parse_break(int *interval)
{
    struct iocontrol *iocp = &Pty.iocontrol;

    iocp->io_oper = OP_SENDBREAK;
    iocp->io_arg = *interval;
    SET_EVENT(EV_UP, EV_UPCONTROL, 0, 0);
}
예제 #11
0
파일: activity.c 프로젝트: juli1/ospat
void* thr1_3_job ()
{
	RETURN_CODE_TYPE ret;
	while (1)
	{
		printf("Partition n. 1 - Thread n.3\n");

		/***************************************************************/
		/* Message processing code should be placed here               */
		/***************************************************************/

		printf(" 3: -- do something\n");
		printf(" 3: Setting an event UP\n\n");
		SET_EVENT (pok_arinc653_events_ids[0], &(ret));
		printf(" 3: Event SET -- Resume sporadic\n\n");
		RESUME (arinc_threads[4], &(ret));
		PERIODIC_WAIT (&(ret));
	}
}
예제 #12
0
void test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl(
	BUFFER_ID_TYPE *  cnx_p_out,
	EVENT_ID_TYPE *  cnx_p_out_entrypoint_barrier)
{
  RETURN_CODE_TYPE test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_the_proc_the_sender_runtime_call_ret;
  common_pkg__Integer test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_p_out_localVariable;
  MESSAGE_SIZE_TYPE test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_p_out_Length = sizeof(common_pkg__Integer);
  SYSTEM_TIME_TYPE test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_p_out_TimeOut = 0;
  test_sporadic_refined_model__the_proc_the_sender_behaviorIdentifier_enum whichPortActivated = test_sporadic_refined_model__the_proc_the_sender_behaviorIdentifier_enum_default_behavior;
while(1)
{
  switch(the_proc_the_sender_entrypoint_impl_current_state)
  {
    case test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_BA_entrypoint_init_state:
    // Transition id: which_behavior_default_mode
    if(1) // no execution condition
    {
      the_proc_the_sender_entrypoint_impl_current_state = test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_BA_entrypoint_exec_state;
      whichPortActivated = test_sporadic_refined_model__the_proc_the_sender_behaviorIdentifier_enum_default_behavior;
      break;
    }
    case test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_BA_entrypoint_wait_dispatch_state:
    // Transition id: dispatch_transition
    if(1) // no execution condition
    {
      the_proc_the_sender_entrypoint_impl_current_state = test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_BA_entrypoint_exec_state;
      PERIODIC_WAIT (&test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_the_proc_the_sender_runtime_call_ret);
      break;
    }
    case test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_BA_entrypoint_exec_state:
    // Transition id: call -- Priority 0
    if(whichPortActivated == test_sporadic_refined_model__the_proc_the_sender_behaviorIdentifier_enum_default_behavior)
    {
      the_proc_the_sender_entrypoint_impl_current_state = test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_BA_entrypoint_wait_dispatch_state;
      send (&test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_p_out_localVariable);
      SEND_BUFFER ((*cnx_p_out), &test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_p_out_localVariable, test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_p_out_Length, test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_p_out_TimeOut, &test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_the_proc_the_sender_runtime_call_ret);
      SET_EVENT ((*cnx_p_out_entrypoint_barrier), &test_sporadic_refined_model__the_proc_the_sender_entrypoint_impl_the_proc_the_sender_runtime_call_ret);
      break;
    }
  }
}
}
예제 #13
0
void
parse_iocflush(int *queues)
{
    struct iocontrol *iocp = &Pty.iocontrol;

    iocp->io_oper = OP_FLUSH;

    switch (*queues) {
    case TCIFLUSH:
	iocp->io_arg = OPFLUSH_IN;
	break;
    case TCOFLUSH:
	iocp->io_arg = OPFLUSH_OUT;
	break;
    case TCIOFLUSH:
	iocp->io_arg = OPFLUSH_IO;
	break;
    }
    SET_EVENT(EV_UP, EV_UPCONTROL, 0, 0);
}
예제 #14
0
void
parse_msgflush(int queues)
{
    int mode;

    switch (queues) {
    case FLUSHR:
	mode = OPFLUSH_IN;
	break;
    case FLUSHW:
	mode = OPFLUSH_OUT;
	break;
    case FLUSHRW:
    default:
	mode = OPFLUSH_IO;
	break;
    }

    SET_EVENT(EV_UP, EV_UPFLUSH, (void *) &mode, sizeof(int));
}
예제 #15
0
void
parse_packet(int type)
{
    int flushbits;
    int flushmode;
    flushbits = type & (TIOCPKT_FLUSHREAD | TIOCPKT_FLUSHWRITE);
    if (flushbits) {
	switch (flushbits) {
	case TIOCPKT_FLUSHREAD:
	    flushmode = OPFLUSH_IN;
	    break;
	case TIOCPKT_FLUSHWRITE:
	    flushmode = OPFLUSH_OUT;
	    break;
	default:
	    flushmode = OPFLUSH_IO;
	    break;
	}
	SET_EVENT(EV_UP, EV_UPFLUSH, (void *) &flushmode, sizeof(int));
    }
}
예제 #16
0
static void timer_1khz(int timer_id) {
	int i;
	static unsigned char timer_20ms;
	static unsigned char timer_62ms;
	static unsigned char timer_10ms;
	
	disk_timerproc();
	
	log_poweron_tick();
	
	// Poll the RF at 100Hz
	if(++timer_10ms >= 10) {
		timer_10ms = 0;
		rf_poll();
	}	
	
	// Generate behavior softirq at 50Hz
	if(++timer_20ms >= 20) {
		timer_20ms = 0;
		behavior_trigger();
	}

	// Generate 16Hz, used by NTC & Acc.
	if(++timer_62ms >= 62) {
		timer_62ms = 0;
		timer_slow();
	}
	
	for(i = 0; i < 2; i++) {
		if(vmVariables.timers[i]) {
			if(++timer[i] >= vmVariables.timers[i]) {
				timer[i] = 0;
				SET_EVENT(EVENT_TIMER0 + i);
			}
		}
	}
	
}
예제 #17
0
static void rc5_callback(unsigned int address, unsigned int command) {
	vmVariables.rc5_address = address;
	vmVariables.rc5_command = command;
	SET_EVENT(EVENT_RC5);
}
예제 #18
0
//--------------------------------------------------------------------------
void MainMenu::KeyEvent(int m_keyNum, int m_keyRepeat)
//--------------------------------------------------------------------------
{
	if(m_keyRepeat)return ;//키릴리즈에 반응하지않는다.
	int m_keyCode = m_keyNum;
	if(m_keyCode == MH_KEY_4)m_keyCode=MH_KEY_LEFT;		//값대치
	if(m_keyCode == MH_KEY_6)m_keyCode=MH_KEY_RIGHT;	//값대치
	if(m_keyCode == MH_KEY_2)m_keyCode=MH_KEY_UP;		//값대치
	if(m_keyCode == MH_KEY_8)m_keyCode=MH_KEY_DOWN;		//값대치
	if(m_keyCode == MH_KEY_5)m_keyCode=MH_KEY_SELECT;	//값대치


	switch(MAINMENU_PAGE){
		case PAGE_GO_QUEST:
			{
				switch(m_keyNum)
				{
					case MH_KEY_CLEAR:	{MAINMENU_PAGE=PAGE_MAINMENU;Init_int();	break;}
					case MH_KEY_UP:		{if(GO_QUEST_NOW_Y>0)GO_QUEST_NOW_Y--;		break;}
					case MH_KEY_DOWN:	{if(GO_QUEST_NOW_Y<1)GO_QUEST_NOW_Y++;		break;}
					case MH_KEY_SELECT:
						{//바로가기
							SAVELOAD_sex		= GO_QUEST_SEX;
							SAVELOAD_MainStyle	= 1;
							GET_MAINQUEST_IDX() = GO_QUEST_NUM;
							int MapNum = 801;
							switch(GO_QUEST_NUM){
								case MAIN_QUEST_findOpen	:MapNum = 202;	break;
								case MAIN_QUEST_openDoor	:MapNum = 201;	break;	
								case MAIN_QUEST_findKail	:MapNum = 801;	break;	
								case MAIN_QUEST_oldMedal	:MapNum = 800;	break;	
								case MAIN_QUEST_callKail	:MapNum = 800;	break;	
								case MAIN_QUEST_goKaien		:MapNum = 800;	break;
								case MAIN_QUEST_goCitizen1	:MapNum = 805;	break;
								case MAIN_QUEST_goCitizen2	:MapNum = 803;	break;
								case MAIN_QUEST_goCitizenK	:MapNum = 805;	break;
								case MAIN_QUEST_findCrystal	:MapNum = 803;	break;
								case MAIN_QUEST_returnKaien	:MapNum = 803;	break;
								case MAIN_QUEST_goScholar	:MapNum = 805;	break;
								case MAIN_QUEST_findDiary	:MapNum = 803;	break;
								case MAIN_QUEST_goSmallTown	:MapNum = 203;	break;
								case MAIN_QUEST_findSiz1	:MapNum = 0;	break;	
								case MAIN_QUEST_findSiz2	:MapNum = 0;	break;	
							}
							AppMain::ResvNextState(MS_GAME_FIELD, MapNum, 0);

						}
						break;
				}

				if(GO_QUEST_NOW_Y==0){
					switch(m_keyNum)
					{
					case MH_KEY_LEFT :  {if(GO_QUEST_NUM>0)GO_QUEST_NUM--;	break;}		
					case MH_KEY_RIGHT:	{GO_QUEST_NUM++;					break;}
					case MH_KEY_0:		{GO_QUEST_NUM=GO_QUEST_NUM*10+0;	break;}
					case MH_KEY_1:		{GO_QUEST_NUM=GO_QUEST_NUM*10+1;	break;}
					case MH_KEY_2:		{GO_QUEST_NUM=GO_QUEST_NUM*10+2;	break;}
					case MH_KEY_3:		{GO_QUEST_NUM=GO_QUEST_NUM*10+3;	break;}
					case MH_KEY_4:		{GO_QUEST_NUM=GO_QUEST_NUM*10+4;	break;}
					case MH_KEY_5:		{GO_QUEST_NUM=GO_QUEST_NUM*10+5;	break;}
					case MH_KEY_6:		{GO_QUEST_NUM=GO_QUEST_NUM*10+6;	break;}
					case MH_KEY_7:		{GO_QUEST_NUM=GO_QUEST_NUM*10+7;	break;}
					case MH_KEY_8:		{GO_QUEST_NUM=GO_QUEST_NUM*10+8;	break;}
					case MH_KEY_9:		{GO_QUEST_NUM=GO_QUEST_NUM*10+9;	break;}
					}
					if(GO_QUEST_NUM>MAIN_QUEST_goSmallTown){GO_QUEST_NUM = MAIN_QUEST_goSmallTown;}
				}else if(GO_QUEST_NOW_Y==1){
					switch(m_keyNum)
					{
					case MH_KEY_LEFT :		
					case MH_KEY_RIGHT:		
						{GO_QUEST_SEX= (!GO_QUEST_SEX);break;}
					}
				}

				break;
			}


		case PAGE_SOUNDONOFF:
			switch(m_keyCode)
			{
			case MH_KEY_SELECT:	{if(MAINMENU_ANI){MAINMENU_PAGE=PAGE_TITLE;Init_int();}break;}
			case MH_KEY_LEFT:	{SOUNDONOFF_SELECT = 0;SOUNDONOFF_TARGET_X=-115;break;}
			case MH_KEY_RIGHT:	{SOUNDONOFF_SELECT = 1;SOUNDONOFF_TARGET_X=+3;break;}
			}
			break;

		case PAGE_TITLE:
			{
				if(m_keyCode){
					MAINMENU_PAGE=PAGE_MAINMENU_INTRO;
					_spr_MainMenu->SetBlendCustom(false,false,0,0);
					MAINMENU_ANI = 0;
				}
			}
			break;

		case PAGE_MAINMENU:
			//------------------------------------------------------------
			{
				if(MAINMENU_WING_STATE != 0){return;}
				switch(m_keyCode)
				{

				case MH_KEY_SOFT1:
					{//바로가기
						SAVELOAD_sex	= 1;
						SAVELOAD_MainStyle	= 0;
						//GET_MAINQUEST_IDX() = MAIN_QUEST_openDoor;
						AppMain::ResvNextState(MS_GAME_FIELD, 400, 0);
					
					}
					break;

				case MH_KEY_SEND:	{Init_int();MAINMENU_PAGE = PAGE_GO_QUEST;GO_QUEST_SEX=1;break;}

				case MH_KEY_SELECT:	{Init_int();MAINMENU_PAGE = PAGE_SELECT_SEX;SELECT_SEX_ACTION_START=true; _spr_title->workPal(true,0,-20);break;}
				case MH_KEY_UP:		{MAINMENU_WING_STATE=1;_ins_Wing->SetAnim(ANIM_MAINMENU_ROTATEUP);			break;}
				case MH_KEY_DOWN:	{MAINMENU_WING_STATE=2;_ins_Wing->SetAnim(ANIM_MAINMENU_ROTATEDOWN);		break;}
				}

				break;
			}
		case PAGE_SELECT_SEX:
			{
				if(MAINMENU_ANI<10)return;
				switch(m_keyCode)
				{ 
				case MH_KEY_SELECT:	{Init_int();MAINMENU_PAGE = PAGE_SELECT_STYLE;SELECT_STYLE_ACTION_START=true;SELECT_STYLE_SELECT=1;break;}
				case MH_KEY_CLEAR:	{Init_int();MAINMENU_PAGE = PAGE_MAINMENU; _spr_title->workPal(false,0,0);break;}
				case MH_KEY_LEFT:	{SELECT_SEX_SELECT=(SELECT_SEX_SELECT+1)%2;SELECT_SEX_ACTION_START=true;break;}
				case MH_KEY_RIGHT:	{SELECT_SEX_SELECT=(SELECT_SEX_SELECT+1)%2;SELECT_SEX_ACTION_START=true;break;}
				}
			}
			break;
		case PAGE_SELECT_STYLE:
			{
				if(MAINMENU_ANI<10)return;
				switch(m_keyCode)
				{
				case MH_KEY_SELECT:	{Init_int();MAINMENU_PAGE = PAGE_SELECT_SLOT;break;}
				case MH_KEY_CLEAR:	{Init_int();MAINMENU_PAGE = PAGE_SELECT_SEX;SELECT_SEX_SELECT=s_NC.Sex;break;}
				case MH_KEY_LEFT:	{SELECT_STYLE_ACTION_START=true;SELECT_STYLE_ACTION_RIGHT=false;break;}
				case MH_KEY_RIGHT:	{SELECT_STYLE_ACTION_START=true;SELECT_STYLE_ACTION_RIGHT=true;break;}
				}
			}
			break;
		case PAGE_SELECT_SLOT:
			{
				if(MAINMENU_ANI<10)return;
				switch(m_keyCode)
				{
				case MH_KEY_SELECT:	
					{

						SAVELOAD_Slot	= s_NC.Slot;
						SAVELOAD_sex	= s_NC.Sex;
						SAVELOAD_MainStyle	= s_NC.Style;

					Init_int();
					SET_EVENT(1);
					AppMain::ResvNextState(MS_GAME_FIELD, 100, 0);
					break;
									
					}
				case MH_KEY_CLEAR:	{Init_int();MAINMENU_PAGE = PAGE_SELECT_STYLE;break;}
				case MH_KEY_UP:		{SELECT_SLOT_SELECT=(SELECT_SLOT_SELECT+2)%3;break;}
				case MH_KEY_DOWN:	{SELECT_SLOT_SELECT=(SELECT_SLOT_SELECT+1)%3;break;}
				}
			}
			break;


	}
}
예제 #19
0
파일: timerm.c 프로젝트: BillTheBest/WinNT4
VOID
ndisMCoDpc(
	IN PVOID SystemSpecific1,
	IN PVOID InterruptContext,
	IN PVOID SystemSpecific2,
	IN PVOID SystemSpecific3
	)
/*++

Routine Description:

	Handles ALL Miniport interrupt DPCs, calling the appropriate Miniport DPC
	depending on the context.

Arguments:

	Interrupt - Interrupt object for the Mac.

	Context - Really a pointer to the Interrupt.

Return Value:

	None.

--*/
{
	//
	// Get adapter from context.
	//

	PNDIS_MINIPORT_INTERRUPT Interrupt = (PNDIS_MINIPORT_INTERRUPT)(InterruptContext);
	PNDIS_MINIPORT_BLOCK Miniport = Interrupt->Miniport;
	BOOLEAN LocalLock;

	W_HANDLE_INTERRUPT_HANDLER MiniportDpc = Interrupt->MiniportDpc;

	if (MINIPORT_TEST_FLAG(Miniport, fMINIPORT_HALTING))
	{
		Decrement((PLONG)&Interrupt->DpcCount, &Interrupt->DpcCountLock);

		if (Interrupt->DpcCount==0)
		{
			SET_EVENT(&Interrupt->DpcsCompletedEvent);
		}
	}
	else
	{
		//
		// Call MiniportDpc
		//
		(*MiniportDpc)(Miniport->MiniportAdapterContext);

		Decrement((PLONG)&Interrupt->DpcCount, &Interrupt->DpcCountLock);

		if (!MINIPORT_TEST_FLAG(Miniport, fMINIPORT_HALTING))
		{
			//
			// Enable interrupts
			//

			MINIPORT_SYNC_ENABLE_INTERRUPT(Miniport);
		}
		else
		{
			if (Interrupt->DpcCount == 0)
			{
				SET_EVENT(&Interrupt->DpcsCompletedEvent);
			}
		}

	}
}
예제 #20
0
파일: timerm.c 프로젝트: BillTheBest/WinNT4
VOID
ndisMDpc(
	IN PVOID SystemSpecific1,
	IN PVOID InterruptContext,
	IN PVOID SystemSpecific2,
	IN PVOID SystemSpecific3
	)
/*++

Routine Description:

	Handles ALL Miniport interrupt DPCs, calling the appropriate Miniport DPC
	depending on the context.

Arguments:

	Interrupt - Interrupt object for the Mac.

	Context - Really a pointer to the Interrupt.

Return Value:

	None.

--*/
{
	//
	// Get adapter from context.
	//

	PNDIS_MINIPORT_INTERRUPT Interrupt = (PNDIS_MINIPORT_INTERRUPT)(InterruptContext);
	PNDIS_MINIPORT_BLOCK Miniport = Interrupt->Miniport;
	BOOLEAN LocalLock;

	W_HANDLE_INTERRUPT_HANDLER MiniportDpc = Interrupt->MiniportDpc;

	NDIS_ACQUIRE_MINIPORT_SPIN_LOCK_DPC(Miniport);

	do
	{
		if (MINIPORT_TEST_FLAG(Miniport, fMINIPORT_HALTING))
		{
			Decrement((PLONG)&Interrupt->DpcCount, &Interrupt->DpcCountLock);

			if (Interrupt->DpcCount==0)
			{
				SET_EVENT(&Interrupt->DpcsCompletedEvent);
			}

			break;
		}

		LOCK_MINIPORT(Miniport, LocalLock);
		if (!LocalLock)
		{
			//
			// A DPC is already running, queue this for later.
			//
			NDISM_QUEUE_WORK_ITEM(Miniport, NdisWorkItemDpc, &Miniport->Dpc, NULL);
			Decrement((PLONG)&Interrupt->DpcCount, &Interrupt->DpcCountLock);

			break;
		}

		//
		// Call MiniportDpc
		//
		(*MiniportDpc)(Miniport->MiniportAdapterContext);

		Decrement((PLONG)&Interrupt->DpcCount, &Interrupt->DpcCountLock);

		if (!MINIPORT_TEST_FLAG(Miniport, fMINIPORT_HALTING))
		{
			//
			// Enable interrupts
			//

			MINIPORT_SYNC_ENABLE_INTERRUPT(Miniport);

#if _SEND_PRIORITY
			//
			//	If we are not reseting and not halting then give priority to sends
			//	at this point.
			//
			if (!MINIPORT_TEST_FLAG(Miniport, fMINIPORT_RESET_REQUESTED) &&
				!MINIPORT_TEST_FLAG(Miniport, fMINIPORT_RESET_IN_PROGRESS) &&
				!MINIPORT_TEST_FLAG(Miniport, fMINIPORT_HALTING))
			{
				if (MINIPORT_TEST_FLAG(Miniport, fMINIPORT_FULL_DUPLEX))
				{
					ndisMProcessDeferredFullDuplexPrioritySends(Miniport);
				}
				else
				{
					ndisMProcessDeferredPrioritySends(Miniport);
				}
			}
			else
#endif
			{
				NDISM_PROCESS_DEFERRED(Miniport);
			}
		}
		else
		{
			if (Interrupt->DpcCount == 0)
			{
				SET_EVENT(&Interrupt->DpcsCompletedEvent);
			}
		}

		UNLOCK_MINIPORT(Miniport, LocalLock);

	} while (FALSE);

	NDIS_RELEASE_MINIPORT_SPIN_LOCK_DPC(Miniport);
}
예제 #21
0
void
handle_com_port_command(unsigned char *buf)
{
    unsigned char cmd = *buf++;
    int cmdarg;
    int cmdidx;
    int is_notify = 0;
    int notify;

    cmdidx = (int) cmd;

    if (cmd >= RAS_COM_START && cmd <= RAS_COM_END) {
	cmdidx -= RAS_COM_START;
    }

    print_command(cmdidx);

    switch (cmd) {
    case RAS_COM_SIGNATURE:
    case RAS_COM_FLOWCONTROL_SUSPEND:
    case RAS_COM_FLOWCONTROL_RESUME:
	break;
    case RAS_COM_SET_BAUDRATE:
	Comport.portconfig.speed = GET_VALUE_4(buf);
	print_speed(Comport.portconfig.speed);
	break;
    case RAS_COM_SET_DATASIZE:
	Comport.portconfig.datasize = GET_VALUE_1(buf);
	print_datasize(Comport.portconfig.datasize);
	break;
    case RAS_COM_SET_PARITY:
	Comport.portconfig.parity = GET_VALUE_1(buf);
	print_parity(Comport.portconfig.parity);
	break;

    case RAS_COM_SET_STOPSIZE:
	Comport.portconfig.stopsize = GET_VALUE_1(buf);
	print_stopsize(Comport.portconfig.stopsize);
	break;

    case RAS_COM_SET_CONTROL:
	cmdarg = GET_VALUE_1(buf);
	print_setcontrol(cmdarg);
	switch (cmdarg) {
	case COM_OFLOW_NONE:
	case COM_OFLOW_SOFT:
	case COM_OFLOW_HARD:
	    Comport.portconfig.flowc = cmdarg;
	    break;
	default:
	    break;
	}

	break;

    case RAS_COM_NOTIFY_LINESTATE:
	is_notify = 1;
	cmdarg = GET_VALUE_1(buf);
	print_linestate(cmdarg);
	Comport.portstate.linestate = cmdarg;
	if (cmdarg & LINE_BREAK_ERROR) {
	    notify = NT_BREAK;
	    SET_EVENT(EV_RN, EV_RNNTFY, &notify, sizeof(int));
	}
	if (cmdarg & LINE_PARITY_ERROR) {
	    notify = NT_PARITY;
	    SET_EVENT(EV_RN, EV_RNNTFY, &notify, sizeof(int));
	}
	break;

    case RAS_COM_SET_LINESTATE_MASK:
	cmdarg = GET_VALUE_1(buf);
	print_linestate(cmdarg);
	break;

    case RAS_COM_NOTIFY_MODEMSTATE:
	is_notify = 1;
	cmdarg = GET_VALUE_1(buf);
	if ((cmdarg ^ Comport.portstate.modemstate) & MODEM_DCD) {
	    if (Comport.portstate.modemstate & MODEM_DCD) {
		notify = NT_DCDOFF;
		SET_EVENT(EV_RN, EV_RNNTFY, &notify, sizeof(int));
	    }
	    else {
		notify = NT_DCDON;
		SET_EVENT(EV_RN, EV_RNNTFY, &notify, sizeof(int));
	    }
	}
	Comport.portstate.modemstate = cmdarg;
	print_modemstate(cmdarg);
	break;

    case RAS_COM_SET_MODEMSTATE_MASK:
	cmdarg = GET_VALUE_1(buf);
	print_modemstate(cmdarg);
	break;
    case RAS_COM_PURGE_DATA:
	cmdarg = GET_VALUE_1(buf);
	print_purge(cmdarg);
	break;
    default:
	sysmessage(MSG_NOTICE, "Unnimplemented command: %d\n", cmd);
	break;
    }

    if (!is_notify) {
	if (IS_CMD_ACTIVE(cmdidx)) {
	    CLR_CMD_ACTIVE(cmdidx);	/* Synchronous operation */
	}
	else {
	    SET_EVENT(EV_RN, EV_RNCMDOK, 0, 0);
	}
    }
    print_all();
}
예제 #22
0
파일: Event.c 프로젝트: BettyET/source42
void EVNT_SetEvent(EVNT_Handle event) {
  SET_EVENT(event);
}
void button_cb(void)
{
    SET_EVENT(EVENT_BUTTON);
}
예제 #24
0
int
tel_getdata(void)
{
    int i;
    int ret;

    struct buffer *bp = Nvt.inbuff;

    unsigned char c;

    if ((ret = sock_read(Comibuf, Nvt.iosize)) <= 0)
	return -1;
    if (Debug > 2) {
	sysmessage(MSG_DEBUG,
		   "Sock_read, %d bytes: %02X %02X %02X %02X %02X %02X %02X %02X\n",
		   ret, Comibuf[0], Comibuf[1], Comibuf[2], Comibuf[3],
		   Comibuf[4], Comibuf[5], Comibuf[6], Comibuf[7]);
    }

    if (Nvt.servertype == SRV_SOCKET) {
	COPY_TO_BUFFER(bp, Comibuf, ret);
	SET_EVENT(EV_RN, EV_RNDATA, 0, 0);
	return (0);
    }

    for (i = 0; i < ret; i++) {
	c = Comibuf[i];
	switch (S_state) {
	case S_DATA:
	    if (c == IAC) {
		S_state = S_IAC;
		print_control(c);
	    }
	    else {
		PUT_BUFFER(bp, c);
/* Event EV_RNDATA will be set at end */
	    }
	    break;
	case S_IAC:
	    switch (c) {
	    case DO:
		S_state = S_DO;
		print_control(c);
		break;
	    case DONT:
		S_state = S_DONT;
		print_control(c);
		break;
	    case WILL:
		S_state = S_WILL;
		print_control(c);
		break;
	    case WONT:
		S_state = S_WONT;
		print_control(c);
		break;
	    case SB:
		S_state = S_SB;
		print_control(c);
		Suboptsize = 0;
		break;
	    case IAC:
	    default:
		S_state = S_DATA;
		PUT_BUFFER(bp, c);
		break;
	    }
	    break;
	case S_DO:
	    print_option(c);
	    S_state = S_DATA;
	    do_option(c);
	    break;
	case S_DONT:
	    print_option(c);
	    S_state = S_DATA;
	    dont_option(c);
	    break;
	case S_WILL:
	    print_option(c);
	    S_state = S_DATA;
	    will_option(c);
	    break;
	case S_WONT:
	    print_option(c);
	    S_state = S_DATA;
	    wont_option(c);
	    break;
	case S_SB:
	    if (c == IAC) {
		S_state = S_SE;
		print_control(c);
	    }
	    else {
		if (Suboptsize > SUBOPT_MAXSIZE) {
		    sysmessage(MSG_WARNING, "Suboption too large\n");
		}
		else {
		    Suboptbuf[Suboptsize++] = c;
		}
	    }
	    break;
	case S_SE:
	    if (c == SE) {
		S_state = S_DATA;
		print_control(c);
		handle_suboption(Suboptbuf, Suboptsize);
		Suboptsize = 0;
	    }
	    else {
		S_state = S_DATA;
		sysmessage(MSG_WARNING, "Suboption not terminated: %d", c);
	    }
	    break;
	}
    }
    if (bp->b_hold) {
	SET_EVENT(EV_RN, EV_RNDATA, 0, 0);
    }

    print_all();
    return (0);
}
예제 #25
0
// We are called at 8kHz
// We should manage the Vind and Vbat acquisition @ 100Hz
//		=> We do it when time == 40, 120, 200, 280, 360, 440, 520, 600, 680, 760
//	in order to be phase shifted with the horizontal and vertical prox.
void motor_new_analog(unsigned int l, unsigned int r, unsigned int time) {
	switch (state) {
		case STATE_IDLE:
			if (++counter == DURATION_IDLE) {
				counter = 0;
				
				if(motor_sens[0] >= 0) {
					pwm_motor_lock_vind1_left();
				} else {
					pwm_motor_lock_vind2_left();
				}
				if(motor_sens[1] >= 0) {
					pwm_motor_lock_vind1_right();
				} else {
					pwm_motor_lock_vind2_right();
				}
				state = STATE_VIND1;
			}
			break;
		case STATE_VBAT:
			vbat[0] = l;
			vbat[1] = r;
			
			SET_EVENT(EVENT_MOTOR);
			
			{
				int i;
				for( i  = 0; i < 2; i++) {
					if(motor_sens[i] >= 0) {
						if(vind2[i] < vbat[i] - 1) {
							vind[i] = vind2[i] - vbat[i];
						} else {
							vind[i] = vind1[i];
						}
					} else {
						if(vind1[i] > 1) {
							vind[i] = vind1[i];
						} else {
							vind[i] = vind2[i] - vbat[i];
						}
					}
					
					vmVariables.vbat[i] = vbat[i];
					
					if(vind[i] > 0 && motor_sens[i] > 0) {
						if(++motor_sens[i] >= SENS_MAX)
							motor_sens[i] = SENS_MAX;
					}	
					if(vind[i] < 0 && motor_sens[i] < 0) {
						if(--motor_sens[i] <= -SENS_MAX)
							motor_sens[i] = -SENS_MAX;
					}
					if(vind[i]> 0 && motor_sens[i] <= 0) 
						motor_sens[i]++;	
					if(vind[i] < 0 && motor_sens[i] >= 0) 
						motor_sens[i]--;
						
					
				}

				// Now filter the vind ... 
				vind_filtered[0] -= vind_left[filter_p];
				vind_filtered[1] -= vind_right[filter_p];
				vind_filtered[0] += vind[0];
				vind_filtered[1] += vind[1];
				vind_left[filter_p] = vind[0];
				vind_right[filter_p++] = vind[1];
				if(filter_p >= 4)
					filter_p = 0;
			}
			
			
			pid_motor_tick(vind,vbat);
			
			pwm_motor_unlock_left();
			pwm_motor_unlock_right();
			
			state = STATE_PWM;
			
			break;
		case STATE_VIND1:
			state = STATE_VIND2;
			if(motor_sens[0] >= 0) {
				pwm_motor_lock_vind2_left();
				vind1[0] = l;
			} else {
				pwm_motor_lock_vind1_left();
				vind2[0] = l;
			}
			
			if(motor_sens[1] >= 0) {
				pwm_motor_lock_vind2_right();
				vind1[1] = r;
			} else {
				pwm_motor_lock_vind1_right();
				vind2[1] = r;
			}
			break;
			
		case STATE_VIND2:
			state = STATE_VBAT;
			if(motor_sens[0] >= 0) {
				vind2[0] = l;
			} else {
				vind1[0] = l;
			}
			
			if(motor_sens[1] >= 0) {
				vind2[1] = r;
			} else {
				vind1[1] = r;
			}	
			
			pwm_motor_lock_vbat_left();
			pwm_motor_lock_vbat_right();
	
			break;
			
		case STATE_PWM:	
			if(time == 40 || time ==  120 || time == 200 || time == 280
				|| time == 360 || time == 440 || time == 520 || time == 600
				|| time == 680 || time == 760) {
				state = STATE_IDLE;
				pwm_motor_lock_off_left();
				pwm_motor_lock_off_right();
			}
			break;
	}
}