// Copyright 2005 Doi Shigeki // list308.cpp パソコンと通信する,スレッドを使う // 〜USB_IOを使った外部制御の基礎 #include #include #include // getch(),kbhit() #include"list302.h" // USB関係の関数 DWORD WINAPI tproc( LPVOID ); HANDLE husb; main() { int r; BYTE x; char c; DWORD id; printf("CQ_USBのテスト8\n"); husb = CreateFile( "\\\\.\\Ezusb-0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0); printf("ハンドル値 = %d \n",(int)husb ); if( (int)husb < 0 ){ printf("USBデバイスがオープンできません\n"); return 0; } r = SetPortConfig( husb, 0, // PIOモード 0, 0,0,0,1,0); // PBのみ出力 printf("コンフィグレーション結果 = %d( 0以外:ok) \n", r); printf("'q'を押すと終了します\n"); CreateThread( NULL, // pointer to thread security attributes 0, // initial thread stack size, 0はデフォルト tproc, // pointer to thread function NULL, // argument for new thread 0, // creation flags &id ); // pointer to returned thread identifier while( 1 ){ c = getch(); if( c == 'q' ) // 'q'で終了 break; if( c >= 'A' ) // A以降を16進のA(10)以降とする c = c - 'A' + 10; c = c & 0xf; // 下位4ビット取り出し printf("出力= %X \n", c); x = ((c & 0x1 ) << 3) + ((c & 0x2 ) << 1) + ((c & 0x4 ) >> 1) + ((c & 0x8 ) >> 3) ; // テストボードとの結線の都合 PIOWrite( husb, 1, x); // ポートB へ出力 } CloseHandle( husb ); } DWORD WINAPI tproc( LPVOID ) { BYTE x0, x; x0 = -1; while(1){ PIORead( husb, 3, &x ); // ポートD から入力 if( x != x0 ){ // スイッチに変化あり x0 = x; x = x >> 4; // テストボードとの結線の都合 printf("入力= %X \n", x ); } Sleep( 10 ); } return 0; }