SDG+USBHost(Mouse) Sample

Dependencies:   Sound_Generator USBHost_custom

Fork of SDG_Mouse_Sample by GR-PEACH_producer_meeting

Information

Japanese version is available in lower part of this page.
このページの後半に日本語版が用意されています.

What is this?

This program is a demonstration that sounds the sound by mouse operation by using USBHost(Mouse) and Sound Generator.

Settings

Close JP3 of GR-PEACH.
/media/uploads/RyoheiHagimoto/sdg-mouse.jpg

Operation

operationeffect
Right clickSounds
Left clickReset to base tone (C)
Moves the mouse to the rightLower the sound
Moves the mouse to the leftHigher the sound
Center cursorAdjust the sensitivity.
Reset the reference value in the click.

Others

The default setting of serial communication (baud rate etc.) in mbed is shown the following link.
Please refer to the link and change the settings of your PC terminal software.
The default value of baud rate in mbed is 9600, and this application uses baud rate 9600.
https://developer.mbed.org/teams/Renesas/wiki/GR-PEACH-Getting-Started#install-the-usb-serial-communication


概要

このプログラムは、USBHost(Mouse) + Sound Generatorで、マウス操作による擬似笛デモです。

設定

GR-PEACHのJP3をショートする必要があります。
/media/uploads/RyoheiHagimoto/sdg-mouse.jpg

操作方法

操作内容
右クリック音出力開始
左クリック基準音(ド)にリセット
マウス右移動高音になります
マウス左移動低音になります
センターカーソル音高低の変化量調整(クリックで基準値にリセット)

Others

mbedのシリアル通信(ボーレート等)のデフォルト設定は以下のリンクに示しています。
リンクを参考に、お使いのPCターミナルソフトの設定を変更して下さい。
mbedでのボーレートのデフォルト値は9600で、このサンプルではボーレート9600を使います。
https://developer.mbed.org/teams/Renesas/wiki/GR-PEACH-Getting-Started#install-the-usb-serial-communication

Files at this revision

API Documentation at this revision

Comitter:
mbed_official
Date:
Mon Sep 16 15:36:24 2013 +0100
Parent:
12:4d2f8064b747
Child:
14:80c2d927b9b5
Commit message:
Synchronized with git revision 061259c07c5cd9172d2dbfabf1f0edc51604f316

Changed in this revision

USBHost/USBEndpoint.cpp Show annotated file Show diff for this revision Revisions of this file
USBHost/USBHALHost.cpp Show annotated file Show diff for this revision Revisions of this file
USBHost/USBHost.cpp Show annotated file Show diff for this revision Revisions of this file
USBHost/USBHostTypes.h Show annotated file Show diff for this revision Revisions of this file
USBHost/dbg.h Show annotated file Show diff for this revision Revisions of this file
USBHostHID/USBHostMouse.cpp Show annotated file Show diff for this revision Revisions of this file
USBHostHub/USBHostHub.cpp Show annotated file Show diff for this revision Revisions of this file
USBHostMSD/USBHostMSD.cpp Show annotated file Show diff for this revision Revisions of this file
USBHostMSD/USBHostMSD.h Show annotated file Show diff for this revision Revisions of this file
USBHostSerial/USBHostSerial.cpp Show annotated file Show diff for this revision Revisions of this file
USBHostSerial/USBHostSerial.h Show annotated file Show diff for this revision Revisions of this file
--- a/USBHost/USBEndpoint.cpp	Tue Aug 13 09:42:31 2013 +0000
+++ b/USBHost/USBEndpoint.cpp	Mon Sep 16 15:36:24 2013 +0100
@@ -27,8 +27,8 @@
 
     //TDs have been allocated by the host
     memcpy((HCTD**)td_list, td_list_, sizeof(HCTD*)*2); //TODO: Maybe should add a param for td_list size... at least a define
-    memcpy(td_list_[0], 0, sizeof(HCTD));
-    memcpy(td_list_[1], 0, sizeof(HCTD));
+    memset(td_list_[0], 0, sizeof(HCTD));
+    memset(td_list_[1], 0, sizeof(HCTD));
     
     td_list[0]->ep = this;
     td_list[1]->ep = this;
--- a/USBHost/USBHALHost.cpp	Tue Aug 13 09:42:31 2013 +0000
+++ b/USBHost/USBHALHost.cpp	Mon Sep 16 15:36:24 2013 +0100
@@ -39,7 +39,7 @@
 
 #define TOTAL_SIZE (HCCA_SIZE + (MAX_ENDPOINT*ED_SIZE) + (MAX_TD*TD_SIZE))
 
-static volatile __align(256) uint8_t usb_buf[TOTAL_SIZE] __attribute((section("AHBSRAM1"),aligned));  //256 bytes aligned!
+static volatile uint8_t usb_buf[TOTAL_SIZE] __attribute((section("AHBSRAM1"),aligned(256)));  //256 bytes aligned!
 
 USBHALHost * USBHALHost::instHost;
 
--- a/USBHost/USBHost.cpp	Tue Aug 13 09:42:31 2013 +0000
+++ b/USBHost/USBHost.cpp	Mon Sep 16 15:36:24 2013 +0100
@@ -96,7 +96,6 @@
                     
                     if (i == MAX_DEVICE_CONNECTED) {
                         USB_ERR("Too many device connected!!\r\n");
-                        deviceInited[i] = false;
                         usb_mutex.unlock();
                         continue;
                     }
@@ -287,7 +286,7 @@
 {
     uint8_t state;
 
-    if(addr == NULL)
+    if(addr == 0)
         return;
 
     volatile HCTD* tdList = NULL;
@@ -482,6 +481,8 @@
                         case INTERRUPT_ENDPOINT:
                             tailInterruptEndpoint = prec;
                             break;
+                        default:
+                            break;
                     }
                 }
                 current->setState(USB_TYPE_FREE);
@@ -1152,13 +1153,12 @@
 
 void USBHost::fillControlBuf(uint8_t requestType, uint8_t request, uint16_t value, uint16_t index, int len)
 {
-#ifdef __BIG_ENDIAN
-#error "Must implement BE to LE conv here"
-#endif
     setupPacket[0] = requestType;
     setupPacket[1] = request;
-    //We are in LE so it's fine
-    *((uint16_t*)&setupPacket[2]) = value;
-    *((uint16_t*)&setupPacket[4]) = index;
-    *((uint16_t*)&setupPacket[6]) = (uint32_t) len;
+    setupPacket[2] = (uint8_t) value;
+    setupPacket[3] = (uint8_t) (value >> 8);
+    setupPacket[4] = (uint8_t) index;
+    setupPacket[5] = (uint8_t) (index >> 8);
+    setupPacket[6] = (uint8_t) len;
+    setupPacket[7] = (uint8_t) (len >> 8);
 }
--- a/USBHost/USBHostTypes.h	Tue Aug 13 09:42:31 2013 +0000
+++ b/USBHost/USBHostTypes.h	Mon Sep 16 15:36:24 2013 +0100
@@ -18,6 +18,7 @@
 #define USB_INC_H
 
 #include "mbed.h"
+#include "toolchain.h"
 
 enum USB_TYPE {
     USB_TYPE_OK = 0,
@@ -135,34 +136,34 @@
 #define CONFIGURATION_DESCRIPTOR_LENGTH     0x09
 
 // ------------ HostController Transfer Descriptor ------------
-typedef __packed struct HCTD {
+typedef struct HCTD {
     __IO  uint32_t   control;        // Transfer descriptor control
     __IO  uint8_t *  currBufPtr;    // Physical address of current buffer pointer
     __IO  HCTD *     nextTD;         // Physical pointer to next Transfer Descriptor
     __IO  uint8_t *  bufEnd;        // Physical address of end of buffer
     void * ep;                      // ep address where a td is linked in
     uint32_t dummy[3];              // padding
-} HCTD;
+} PACKED HCTD;
 
 // ----------- HostController EndPoint Descriptor ------------- 
-typedef __packed struct hcEd {
+typedef struct hcEd {
     __IO  uint32_t  control;        // Endpoint descriptor control
     __IO  HCTD *  tailTD;           // Physical address of tail in Transfer descriptor list
     __IO  HCTD *  headTD;           // Physcial address of head in Transfer descriptor list
     __IO  hcEd *  nextED;         // Physical address of next Endpoint descriptor
-} HCED;
+} PACKED HCED;
 
 
 // ----------- Host Controller Communication Area ------------  
-typedef __packed struct hcca {
+typedef struct hcca {
     __IO  uint32_t  IntTable[32];   // Interrupt Table
     __IO  uint32_t  FrameNumber;    // Frame Number
     __IO  uint32_t  DoneHead;       // Done Head
     volatile  uint8_t   Reserved[116];  // Reserved for future use                                  
     volatile  uint8_t   Unknown[4];     // Unused                                                   
-} HCCA;
+} PACKED HCCA;
 
-typedef __packed struct {
+typedef struct {
     uint8_t bLength;            
     uint8_t bDescriptorType;    
     uint16_t bcdUSB;            
@@ -177,9 +178,9 @@
     uint8_t iProduct;           
     uint8_t iSerialNumber;      
     uint8_t bNumConfigurations; 
-} DeviceDescriptor;
+} PACKED DeviceDescriptor;
 
-typedef __packed struct {
+typedef struct {
     uint8_t bLength;               
     uint8_t bDescriptorType;       
     uint16_t wTotalLength;         
@@ -188,7 +189,7 @@
     uint8_t iConfiguration;        
     uint8_t bmAttributes;          
     uint8_t bMaxPower;             
-} ConfigurationDescriptor; 
+} PACKED ConfigurationDescriptor; 
 
 typedef struct {
     uint8_t bLength;                 
--- a/USBHost/dbg.h	Tue Aug 13 09:42:31 2013 +0000
+++ b/USBHost/dbg.h	Mon Sep 16 15:36:24 2013 +0100
@@ -24,26 +24,26 @@
 #define DEBUG_EVENT 0
 
 #if (DEBUG)
-#define USB_DBG(x, ...) std::printf("[USB_DBG: %s:%d]"x"\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
+#define USB_DBG(x, ...) std::printf("[USB_DBG: %s:%d]" x "\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
 #else
 #define USB_DBG(x, ...)
 #endif
 
 #if (DEBUG_TRANSFER)
-#define USB_DBG_TRANSFER(x, ...) std::printf("[USB_TRANSFER: %s:%d]"x"\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
+#define USB_DBG_TRANSFER(x, ...) std::printf("[USB_TRANSFER: %s:%d]" x "\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
 #else
 #define USB_DBG_TRANSFER(x, ...)
 #endif
 
 #if (DEBUG_EVENT)
-#define USB_DBG_EVENT(x, ...) std::printf("[USB_EVENT: %s:%d]"x"\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
+#define USB_DBG_EVENT(x, ...) std::printf("[USB_EVENT: %s:%d]" x "\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
 #else
 #define USB_DBG_EVENT(x, ...)
 #endif
 
-#define USB_INFO(x, ...) std::printf("[USB_INFO: %s:%d]"x"\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
-#define USB_WARN(x, ...) std::printf("[USB_WARNING: %s:%d]"x"\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
-#define USB_ERR(x, ...) std::printf("[USB_ERR: %s:%d]"x"\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
+#define USB_INFO(x, ...) std::printf("[USB_INFO: %s:%d]" x "\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
+#define USB_WARN(x, ...) std::printf("[USB_WARNING: %s:%d]" x "\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
+#define USB_ERR(x, ...) std::printf("[USB_ERR: %s:%d]" x "\r\n", __FILE__, __LINE__, ##__VA_ARGS__);
 
 #endif
 
--- a/USBHostHID/USBHostMouse.cpp	Tue Aug 13 09:42:31 2013 +0000
+++ b/USBHostHID/USBHostMouse.cpp	Mon Sep 16 15:36:24 2013 +0100
@@ -82,7 +82,6 @@
 
 void USBHostMouse::rxHandler() {
     int len_listen = int_in->getSize();
-    int len = int_in->getLengthTransferred();
     
     if (onUpdate) {
         (*onUpdate)(report[0] & 0x07, report[1], report[2], report[3]);
--- a/USBHostHub/USBHostHub.cpp	Tue Aug 13 09:42:31 2013 +0000
+++ b/USBHostHub/USBHostHub.cpp	Mon Sep 16 15:36:24 2013 +0100
@@ -192,7 +192,7 @@
                         host->deviceConnected(dev->getHub() + 1, port, status & PORT_LOW_SPEED, this);
                     } else {
                         USB_DBG("[hub handler hub: %d - port: %d] device disconnected", dev->getHub(), port);
-                        host->deviceDisconnected(dev->getHub() + 1, port, this, NULL);
+                        host->deviceDisconnected(dev->getHub() + 1, port, this, 0);
                     }
                     
                     clearPortFeature(C_PORT_CONNECTION_FEATURE, port);
@@ -209,7 +209,7 @@
                 if ((status & PORT_OVER_CURRENT)) {
                     USB_ERR("OVER CURRENT DETECTED\r\n");
                     clearPortFeature(PORT_OVER_CURRENT, port);
-                    host->deviceDisconnected(dev->getHub() + 1, port, this, NULL);
+                    host->deviceDisconnected(dev->getHub() + 1, port, this, 0);
                 }
             }
         }
@@ -229,7 +229,7 @@
         if (status & PORT_OVER_CURRENT) {
             USB_ERR("OVER CURRENT DETECTED\r\n");
             clearPortFeature(PORT_OVER_CURRENT, port);
-            host->deviceDisconnected(dev->getHub() + 1, port, this, NULL);
+            host->deviceDisconnected(dev->getHub() + 1, port, this, 0);
             break;
         }
         Thread::wait(10);
--- a/USBHostMSD/USBHostMSD.cpp	Tue Aug 13 09:42:31 2013 +0000
+++ b/USBHostMSD/USBHostMSD.cpp	Mon Sep 16 15:36:24 2013 +0100
@@ -154,7 +154,7 @@
 int USBHostMSD::inquiry(uint8_t lun, uint8_t page_code) {
     USB_DBG("Inquiry");
     uint8_t evpd = (page_code == 0) ? 0 : 1;
-    uint8_t cmd[6] = {0x12, (lun << 5) | evpd, page_code, 0, 36, 0};
+    uint8_t cmd[6] = {0x12, uint8_t((lun << 5) | evpd), page_code, 0, 36, 0};
     uint8_t result[36];
     int status = SCSITransfer(cmd, 6, DEVICE_TO_HOST, result, 36);
     if (status == 0) {
--- a/USBHostMSD/USBHostMSD.h	Tue Aug 13 09:42:31 2013 +0000
+++ b/USBHostMSD/USBHostMSD.h	Mon Sep 16 15:36:24 2013 +0100
@@ -73,7 +73,7 @@
     uint8_t nb_ep;
 
     // Bulk-only CBW
-    typedef __packed struct {
+    typedef struct {
         uint32_t Signature;
         uint32_t Tag;
         uint32_t DataLength;
@@ -81,15 +81,15 @@
         uint8_t  LUN;
         uint8_t  CBLength;
         uint8_t  CB[16];
-    } CBW;
+    } PACKED CBW;
 
     // Bulk-only CSW
-    typedef __packed struct {
+    typedef struct {
         uint32_t Signature;
         uint32_t Tag;
         uint32_t DataResidue;
         uint8_t  Status;
-    } CSW;
+    } PACKED CSW;
 
     CBW cbw;
     CSW csw;
--- a/USBHostSerial/USBHostSerial.cpp	Tue Aug 13 09:42:31 2013 +0000
+++ b/USBHostSerial/USBHostSerial.cpp	Mon Sep 16 15:36:24 2013 +0100
@@ -131,10 +131,10 @@
     line_coding.stop_bits = (stop_bits == 1) ? 0 : 2;
     
     // set line coding
-    int res = host->controlWrite(   dev,
-                                    USB_RECIPIENT_INTERFACE | USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_CLASS,
-                                    SET_LINE_CODING,
-                                    0, serial_intf, (uint8_t *)&line_coding, 7);
+    host->controlWrite( dev,
+                        USB_RECIPIENT_INTERFACE | USB_HOST_TO_DEVICE | USB_REQUEST_TYPE_CLASS,
+                        SET_LINE_CODING,
+                        0, serial_intf, (uint8_t *)&line_coding, 7);
 }
 
 int USBHostSerial::_getc() {
--- a/USBHostSerial/USBHostSerial.h	Tue Aug 13 09:42:31 2013 +0000
+++ b/USBHostSerial/USBHostSerial.h	Mon Sep 16 15:36:24 2013 +0100
@@ -142,12 +142,12 @@
 
     uint8_t buf[64];
 
-    typedef __packed struct {
+    typedef struct {
         uint32_t baudrate;
         uint8_t stop_bits;
         uint8_t parity;
         uint8_t data_bits;
-    } LINE_CODING;
+    } PACKED LINE_CODING;
     
     LINE_CODING line_coding;