//----------------------------------------------------------------------------------------- // 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; } }
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; }