/*
 *===============================================
 *= USB学習キットサポートツール		=
 *= ユーザエンドポイントリード/ライトテスト	=
 *=						=
 *===============================================
 */
/*
	内容

	0〜255の数字を2個キーボードから入力する
	数字2個をCPUボードに転送する
	CPUボードから数字2個を受け取る
	受け取った数字を表示する
*/
#include <windows.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "utkdrv.h"

#define	READY	0

#define	EP_IEP	0
#define	EP_EPA	1
#define	EP_EPB	2
#define	EP_EPC	3
#define	EP_EPD	4

unsigned char	dl_data[1024];
unsigned int	dl_length;

/*
 * ファイルポインタ
 */
HANDLE hRead = INVALID_HANDLE_VALUE, hWrite = INVALID_HANDLE_VALUE;

int _cdecl main(unsigned int argc, unsigned char *argv[])
{
  int	bytes;
  unsigned int	in ,stat;
  HUSB husb;

/**** CPUボードとの通信手段を確保する ****/
/* この部分はおまじないと思えば良い */
  husb = UTK_Open();
  if ( husb == INVALID_HANDLE_VALUE) {
    printf("学習ボードが接続されていません\n");
    exit(1);
  }

  hWrite = UTK_OpenPipe(husb, 0, EP_EPC);
  hRead  = UTK_OpenPipe(husb, 0, EP_EPD);

  if ( (hRead == INVALID_HANDLE_VALUE) || (hWrite == INVALID_HANDLE_VALUE)) {
    printf("パイプが開けません\n");
    printf("%x %x %x",INVALID_HANDLE_VALUE, hRead, hWrite);
    if (hRead != INVALID_HANDLE_VALUE)
      CloseHandle(hRead);
    if (hWrite != INVALID_HANDLE_VALUE)
      CloseHandle(hWrite);
    exit(1);
  }
  stat = READY;
/**** ここまでおまじない ****/

  do {
    /**** 数字を2個読み込む ****/
    printf("A: ");
    scanf("%d", &in);
    dl_data[0] = (unsigned char)in;

    printf("B: ");
    scanf("%d", &in);
    dl_data[1] = (unsigned char)in;

    /**** CPUボードにデータを送る ****/
    dl_length = 2; /* 送るデータのバイト数 */
    WriteFile(hWrite,dl_data,dl_length,&bytes,NULL); /* 送信 */
    printf("Send %d bytes\n", bytes); /* 送ったバイト数を表示 */

    /**** CPUボードからデータを受け取る ****/
    dl_length = 2; /* 受け取るデータのバイト数 */
    stat = ReadFile(hRead, dl_data,dl_length,&bytes,NULL);
    /* 受信 */
    /* 受け取ったバイト数と戻り値を表示 */
    printf("Receive %d bytes, stat=%x\n", bytes, stat);

    /**** 受け取ったデータを表示 ****/
    printf("Return: %d, %d\n", dl_data[0], dl_data[1]);
  }
  while (in);/* inが0ならおしまい */

  /**** 後始末: おまじない ****/
  CloseHandle(hWrite);
  CloseHandle(hRead);

  exit(stat);
}