예제 #1
0
파일: Joystick.cpp 프로젝트: thayamizu/Nyx
		//-----------------------------------------------------------------------------------------
		//
		void initialize(HWND hwnd_, float range, int buttonNum) 
		{
			//メンバ初期化
			::ZeroMemory(&joyCaps_, sizeof(joyCaps_));
			allowRange_ = range;
			set_button_num(buttonNum);

			//DirectInputオブジェクトの作成
			LPDIRECTINPUT8 joystick = NULL;
			HRESULT hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&joystick, NULL );
			if(FAILED(hr)) 
			{
				debug_out::trace("DirectInputオブジェクトの生成に失敗しました。");
				throw nyx::com_exception("DirectInputオブジェクトの生成に失敗しました。", hr);
			}
			joystick_ = DirectInputPtr(joystick);

			//デバイスの列挙
			hr = joystick_->EnumDevices(
				DI8DEVCLASS_GAMECTRL, enum_joysticks_callback,(void *)this, DIEDFL_ATTACHEDONLY );
			if( FAILED(hr))
			{
				debug_out::trace("制御モードの設定に失敗しました。");
				throw nyx::com_exception("制御モードの設定に失敗しました。", hr);
			}

			//ジョイスティックデバイスが作成できた
			if (joystickDevice_ != nullptr ) {
				hr = joystickDevice_->SetDataFormat(&c_dfDIJoystick2);
				if( FAILED(hr))
				{
					debug_out::trace("データ形式の設定に失敗しました。");
					throw nyx::com_exception("データ形式の設定に失敗しました。", hr);
				}

				//モードを設定(フォアグラウンド&非排他モード)
				hr = joystickDevice_->SetCooperativeLevel(hwnd_, DISCL_EXCLUSIVE | DISCL_FOREGROUND);
				if( FAILED(hr))
				{
					debug_out::trace("制御モードの設定に失敗しました。");
					throw nyx::com_exception("制御モードの設定に失敗しました。", hr);

				}
				// コールバック関数を使って各軸のモードを設定
				hr = joystickDevice_->EnumObjects(enum_axis_callback,(void*)this, DIDFT_AXIS);
				if( FAILED(hr))
				{
					debug_out::trace("軸モードの設定に失敗しました。");
					throw nyx::com_exception("軸モードの設定に失敗しました。", hr);
				}


				//初期化成功
				isInitialized =true;
			}
			else {
				joystickDevice_= nullptr;
			}
		}
예제 #2
0
int main(int argc, const char *argv[])
{ 
    tm_cmd_t ipc_cmd;
    char i;
    int fd, opt_idx, c, max_pnl=PNL_NUM;
    char *short_opts = "p:sa:n:e:f:chvC:T:b:i:";
    pid_t pid;

    if(argc == 1)
        tm_test_usage();

    memset((char*)&ipc_cmd, 0, sizeof(tm_cmd_t));

    while ((c = getopt_long(argc, (char* const*)argv, short_opts, long_opts, &opt_idx)) != -1)
    {
        switch(c)
        {
            case 'C':
                memcpy(client_name, optarg, strlen(optarg));
                break;
            case 'T':
                memcpy(target_name, optarg, strlen(optarg));
                break;
            case 'b':
                ttm.arg.bind.set=1;
                memcpy(bind_buf, optarg, strlen(optarg));
                break;
            case 'a':
                ttm.arg.ap.set = 1;
                memcpy(ap_buf, optarg, strlen(optarg));
                break;
            case 'n':
                ttm.set_pnl_num = 1;
                ttm.pnl_num = optarg[0] - '0';
                break;
            case 'e':
                ttm.arg.evt.set = 1;
                memcpy(evt_buf, optarg, strlen(optarg));
                break;
            case 'f':
                ttm.arg.fb.set = 1;
                memcpy(fb_buf, optarg, strlen(optarg));
                break;
            case 'i':
                ttm.arg.pnl_evt.set = 1;
                memcpy(pnl_evt_buf, optarg, strlen(optarg));
                break;
            case 'c':
                ttm.calibrate = 1;
                break;
            case 'p':
                ttm.pnl_arg = optarg[0] - '0';
                break;
            case 's':
                ttm.split = 1;
                break;
            case 'h':
                tm_test_usage();
                break;
            case 'v':
                tm_test_version();
                break;
            default:
                break;
        }
    }

    parse_options();

#if TEST_DEBUG
    show_args_for_debug();
#endif

    if(ttm.calibrate)
    {
        tm_calibrate();
        return 0;
    }

    if(ttm.set_pnl_num)
        max_pnl = ttm.pnl_num;
    
    if(ttm.pnl_arg < 0 || ttm.pnl_arg > max_pnl)
    {
        printf("set panel error\n");
        tm_test_usage();
    }    

    if(!ttm.arg.ap.set)
    {
        printf("no set ap\n");
        return 0;
    }

    signal(SIGSEGV, sig);
    signal(SIGINT, sig);
    signal(SIGTERM, sig);

    ttm.mode =  ttm.arg.ap.num - 1;

    set_ttm();
    set_button_num(ttm.arg.ap.num + 3);
    set_comment();

    // set fb position
    for (i = 0; i < max_pnl; i++) 
    {
        printf("panel %d pan : %s\n",i,ttm.fb[(int)i].pan);
        printf("panel %d fb  : %s\n",i,ttm.fb[(int)i].dev);
        printf("panel %d evt : %s\n",i,ttm.evt[(int)i].dev);
        if((fd=open(ttm.fb[(int)i].pan, O_RDWR))>=0)
        {
            if (write(fd, "0,0", 3)<0) {
                dbg_log("write pan error, pan : %s",ttm.fb[(int)i].pan);
            }
            close(fd);
        }
        else
        {
            printf("open pan error\n");
        }
#if 1      
        pid = fork();
        if (pid == -1) 
        {
            printf("fork %d error \n", i);
        }
        else if (pid == 0)
        {
            ts_test(&ttm.fb[(int)i], &ttm.evt[(int)i]);
            _exit(0);
        }
#endif
    }
  
    if(open_ipc())
        return 0;

//    ipc_cmd.general.hdr=0xd0;
//    ipc_cmd.len=1;
//    ttm.wait_ver=1;
//    send_ipc(&ipc_cmd);
//
//    while(ttm.wait_ver)
//        sleep(1);

    // set ap display
    

    for (i = 0; i < 3; i++) 
    {
        if(ttm.mode == MONO_AP)
        {
            ipc_cmd.stretch.hdr=0xa1;
            ipc_cmd.stretch.panel=i;
            ipc_cmd.stretch.ap=ttm.arg.ap.data[0];
            ipc_cmd.len=3;
            send_ipc(&ipc_cmd);
        }
        else
        {	
            ipc_cmd.clear.hdr=0xa2;
            ipc_cmd.clear.panel=i;
            ipc_cmd.len=2;
            
            send_ipc(&ipc_cmd);
      
            for(int j=0; j<ttm.arg.ap.num; j++)
            {
                ipc_cmd.append.hdr=0xa0;
                ipc_cmd.append.panel=i;
                ipc_cmd.append.ap=ttm.arg.ap.data[j];

                set_pnl_append_cmd(&ipc_cmd.append, j);
                set_ap_append_cmd(&ipc_cmd.append, j);
               
                ipc_cmd.len=11;

                send_ipc(&ipc_cmd);
            }
        }
    }

    if(g_ipc.server)
    {
        lst_close_channel(g_ipc.server);
        g_ipc.server = NULL;
    }

    return 0;
}