MQX 4.1.0は、"C:\Freescale\Freescale_MQX_4_1\usb\host\examples\cdc\cdc_serial" のフォルダに USB Host CDC デモを提供しますが、これを動作させるには、 いくつかの手順を実行する必要があります。
1. cdc_serial.h の CDC_EXAMPLE_USE_HW_FLOW を
1 に変更します。 #define CDC_EXAMPLE_USE_HW_FLOW 1
2. config\twrk70f120m\user_config.h で、UART の割り込みモードを設定する必要があります。// プラットフォームによって異なりますが、ここでは TWR-K70F120M が使用されています。
#define BSPCFG_ENABLE_TTYC 0
#define BSPCFG_ENABLE_ITTYC 1
mqx\source\bsp\twrk70f120m\twrk70f120m.h で、'ttyc' の代わりに 'ittyc' を指定します
#ifndef BSP_DEFAULT_IO_CHANNEL
#if BSPCFG_ENABLE_ITTYC
#define BSP_DEFAULT_IO_CHANNEL "ittyc:" /* OSJTAG-COM ポーリングモード */
#define BSP_DEFAULT_IO_CHANNEL_DEFINED
#else
#define BSP_DEFAULT_IO_CHANNEL NULL
#endif
#else
3. usb\host\source\classes\cdc\usb_host_cdc.c で、引数として data_instance の代わりに fd_ptr を渡します。
ある。977号線付近
usb_hostdev_tr_init(&tr, (tr_callback) usb_class_cdc_in_data_callback, (void *) data_instance);
usb_hostdev_tr_init(&tr, (tr_callback) usb_class_cdc_in_data_callback, (void *) fd_ptr); b.1116番線付近 usb_hostdev_tr_init(&tr, (tr_callback)
usb_class_cdc_in_data_callback, (void *) data_instance); usb_hostdev_tr_init(&tr, (tr_callback) usb_class_cdc_in_data_callback, (void *) fd_ptr); c. 1226号線付近 usb_hostdev_tr_init(&tr, (tr_callback) usb_class_cdc_out_data_callback, (void *) data_instance); usb_hostdev_tr_init(&tr, (tr_callback) usb_class_cdc_out_data_callback, (void *) fd_ptr); 上記の変更により、Host CDCデモは、エコーデモである「C:\Freescale\Freescale_MQX_4_1\usb\device\examples\cdc\virtual_com」にあるようなデバイスCDCデモと連携でき、受信した任意の文字を送り返すことができます。しかし、エコーをよりはっきりと見るために、たとえばAと入力すると、ハイパーターミナルからBが表示されるなど、受信した文字よりも大きい文字をエコーバックするようにしました。
これを行うには、virtual_com.cのVirtual_Com_App(void)を変更する必要があります以下のように:
void Virtual_Com_App(void)
{
/* ユーザーコード */
if(g_recv_size)
{
_mqx_int i;
/* バッファをセンドバフにコピー */
for (i = 0; i < g_recv_size; i++)
{
printf("コピー: %c\n", g_curr_recv_buf[i]);
g_curr_send_buf[g_send_size++] = g_curr_recv_buf[i]+1;
}
g_recv_size = 0;
}
if(g_send_size)
{
uint8_t error;
uint8_tサイズ= g_send_size;
g_send_size = 0;
エラー = USB_Class_CDC_Send_Data(g_app_handle, DIC_BULK_IN_ENDPOINT,
g_curr_send_buf、サイズ);
if (!error && !(サイズ % DIC_BULK_IN_ENDP_PACKET_SIZE)) {
/* 最後のパケットがエンドポイントのサイズである場合、ゼロエンドのパケットも送信します。
**は、追加のものがないことをホストに通知したいことを意味します
** データを使用して、出力をフラッシュできます。
*/
エラー = USB_Class_CDC_Send_Data(g_app_handle, DIC_BULK_IN_ENDPOINT, NULL, 0);
}
if(エラー != USB_OK)
{
/* ここでデータ処理コードを送信できませんでした */
}
}
return;
}
TWR-K70F120(Host) や TWR-K60D100M(Device) などにコードをダウンロードし、TWR-SER や TWR-ELEV で組み立てた後は、次のように USB ポート経由で接続できます。
J10(USB VBUS Select)とJ16(USB Mode Select)は、各タワーシステムの機能に合わせてご注目ください。
ハイパーターミナルをTWR-K70F120Mシステムに接続すると、ENTERで終わる任意の文字を入力することができ、その文字が添付のビデオとしてエコーバックされます。
この問題は次のリリースで修正される予定ですが、ご不便をおかけして申し訳ございません。
Hi Chris,
はい、このコードは間違っていると思います。
新しいUSBスタックでは、この部分は次のようになります。
よろしくお願いいたします。
Kan
こんにちは、これに感謝します、それは非常に役に立ちました!MQX 4.1 に移植しているアプリケーション コードがありますが、ファイル ポインター エラーが原因で問題が発生していました。
私は別の問題であるかもしれないと思うものを見つけました - usb_host_cdc_intf.cの222行目と209行目で、インポインタとアウトポインタの動作が入れ替わっていると思います - 私が正しく解釈していれば、パイプが発信している場合にのみrxバッファを割り当てます...それは正しくないようです。