ユーザアプリケーションへの導入手順 Harmonyを利用したアプリケーション開発では、"Harmony configurater"を使用すると、簡単にプログラムのひな形を生成できるので便利です。 本説明は、後からBluetooth機能を追加する手順です。  (1)Configuraterでアプリのひな形を自動生成  (2)それにアプリケーションロジックを組込み大体動くようにする  (3)安定してきたらBluetooth機能を追加する (1)Configuraterでアプリのひな形を自動生成 プロジェクトを新規作成し、Harmony Configuraterを使って、ユーザアプリケーションで必要な機能を選択しソースコードを自動生成させます。 以下の点だけ注意して下さい。 ・USBホスト機能を有効にします。   USB Libraly    Use USB Stack     USB Driver Implementation: DYNAMIC     Interrupt Mode     Select Host or Device stack       USB Host (Recommented) 使用するホストクラス(Host Client Driver)は任意です。全く選択しなくともOKです。 ・USB-PLLクロックを有効にして下さい(UPLLEN=ON,UPLLIDIV=???)   説明するまでもありませんが、USB-PLLへ与えるクロックは4MHzにしなければならないので、   外部クリスタルとの分周比をUPLLDIVに指定します。逆に言うと4の倍数のクリスタルを用意しなければなりません。   内蔵オシレータ8MHzはUSB-PLLの入力には出来ませんので、必ずクリスタルを外付けする必要があります。   外部クリスタルは、プライマリオシレータという内蔵回路で駆動されますが、   10MHz以下のクリスタルの場合XTモード、それ以上はHSモードで区別が必要です。(消費電流が違う) ・ヒープサイズを指定しておいて下さい   Device & Project Configuration    Project Configuration     XC32      xc32-ld       General        Heap Size(Bytes): 6000 ・USBホストの設定を変更   とりあえず、コンパイルだけしてみるとシンボル未解決のエラーが発生します。     BSP_USBVBUSSwitchOverCurrentDetect -> USBバスの電流不足検出関数     BSP_USBVBUSPowerEnable -> USBバスの電源オンオフ制御関数   以下のようにsystem_init.cファイルを修正して無効化するか、実際に機能する関数を定義して下さい。 --------------------------------------------------------------------- DRV_USBFS_INIT drvUSBFSInit = { : .portOverCurrentDetect = BSP_USBVBUSSwitchOverCurrentDetect, .portPowerEnable = BSP_USBVBUSPowerEnable, : }; : const USB_HOST_INIT usbHostInitData = { .nTPLEntries = 1 , : }; --------------------------------------------------------------------- DRV_USBFS_INIT drvUSBFSInit = { : .portOverCurrentDetect = NULL, .portPowerEnable = NULL, : }; : const USB_HOST_INIT usbHostInitData = { .nTPLEntries = 0 , : }; ---------------------------------------------------------------------   .nTPLEntriesの値を1から0に変更しておいて下さい。この修正を行わないと、ユーザアプリケーション実行時、system_init.cでエラーが発生します。   これで、コンパイルエラーが無くなり、ビルドが完了するようになります。   以下の警告メッセージは無視できます。     system_config.h:56:0: warning: "_PLIB_UNSUPPORTED" redefined [enabled by default]     #define _PLIB_UNSUPPORTED     peripheral_common.h:749:0: note: this is the location of the previous definition  #define _PLIB_UNSUPPORTED __attribute__((unsupported("The microcontroller selected does not implement this feature."))) (2)それにアプリケーションロジックを組込み大体動くようにする 自動生成されたソースコードに、アプリケーションの処理を組み入れ、通常通りプログラム開発を行います。 Bluetooth以外の動作を確認できるレベルまで持っていって下さい。 なお、ConfiguraterでUSBホスト機能を取り入れただけではUSBは動作しませんので、 アプリがうまく動かなくても、USB(Bluetooth)を疑う必要はありません。 (3)安定してきたらBluetooth機能を追加する アプリケーションプログラムが安定動作する事を確認できたら、BT機能を有効にします。 ・bluetoothスタックのソースをコピーし、プロジェクトに登録    src/bluetoothとsrc/usbディレクトリを作成し、本サイトからダウンロードしたソースファイルをそれぞれコピーして下さい。      usb_host_FIX.cは任意で、問題が出た時に後で追加するのがよろしいかと思います。        (その場合、ソースツリーからusb_host.cの登録を削除(無効化でも良い)して下さい)    コピーした.cファイルをプロジェクトソースツリーに登録      ソースツリー図を参照しながら、同じになるように、ロジカルディレクトリを作ってその配下に登録していきます。      全く同じにする必要はありませんが、分かり易くした方が良いというだけです。 ・プロジェクトプロパティのXC32(gcc)オプションを変更    preproccesssingのincludeに"./src/bluetooth"を追加 ・system_init.cファイルを修正 --------------------------------------------------------------------- const USB_HOST_TPL_ENTRY USBTPList[ 1 ] = { }; const USB_HOST_INIT usbHostInitData = { .nTPLEntries = 0 ,       : }; --------------------------------------------------------------------- const USB_HOST_TPL_ENTRY USBTPList[ 1 ] = { TPL_INTERFACE_CLASS_SUBCLASS_PROTOCOL(0xe0, 0x01, 0x01, NULL, USB_HOST_BLUETOOTH_INTERFACE), }; const USB_HOST_INIT usbHostInitData = { .nTPLEntries = 1 ,       : }; --------------------------------------------------------------------- ・system_definitions.cファイルに追加記述 --------------------------------------------------------------------- #include "usb/usb_host.h" #include "usb/usb_host_hub.h" #include "usb/usb_host_hub_interface.h" #include "app.h" --------------------------------------------------------------------- #include "usb/usb_host.h" #include "usb/usb_host_hub.h" #include "usb/usb_host_hub_interface.h" #include "usb/usb_host_bluetooth.h" // USB:Bluetooth stack interface // Bluetooth stack #include "bt_rfcomm_server.h" // Bluetooth RFCOMM API #include "bt_att_server.h" // Bluetooth ATT server API #include "bt_att_db.h" // Bluetooth ATT database API #include "app.h" --------------------------------------------------------------------- ・app.cに必要最低限のコードを追加    以下のソースコードをapp.cに追記。 --------------------------------------------------------------------- // // Bluetooth call back routines // void bt_rfcommServerDataRecived(unsigned char *inBuff, size_t inLen) { return; } void bt_attDbNotification(unsigned short handle, void *value, size_t valueLen) { // Essential action bt_att_serverNotificationQueueAdd(handle); // User action //------------------------------------------------------------- //------------------------------------------------------------- return; } --------------------------------------------------------------------- ・コンパイルしてみてエラーが無い事を確認 シンボル関係の未解決など ・app.cにUSBを有効にするコードを追加    USB_HOST_BusEnable(0)をコールする事で、USBおよびBluetooth機能が動き出します。    デフォルトのサービス名、データ名等でBluetoothが動作しているはずです。    PCやスマートフォンなどを使って確認してみて下さい。    ソースコードsrc/bluetooth内のデフォルト設定値を変更して、望みの名称等に変えて行って下さい。 以上