Skip to content

Commit

Permalink
Not working
Browse files Browse the repository at this point in the history
  • Loading branch information
morio committed Jan 10, 2024
1 parent 0cd2e83 commit eaab8cf
Show file tree
Hide file tree
Showing 4 changed files with 214 additions and 6 deletions.
7 changes: 4 additions & 3 deletions src/firmware/include/quokkadb_tusb_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@
//--------------------------------------------------------------------

#define CFG_TUSB_OS OPT_OS_PICO
#define CFG_TUSB_MCU OPT_MCU_RP2040
#define CFG_TUSB_MCU OPT_MCU_RP2040
#define CFG_TUSB_RHPORT0_MODE OPT_MODE_HOST

// Enable host stack
#define CFG_TUH_ENABLED 1
Expand Down Expand Up @@ -78,8 +79,8 @@
#define CFG_TUH_HUB 7
// max device support (excluding hub device)
#define CFG_TUH_DEVICE_MAX 14 // hub typically has 4 ports
#define CFG_TUH_HID 4 // typical keyboard + mouse device can have 3-4 HID interfaces
#define CFG_TUH_MSC 0
#define CFG_TUH_HID 8 // typical keyboard + mouse device can have 3-4 HID interfaces
#define CFG_TUH_MSC 1

#define CFG_TUH_HID_EPIN_BUFSIZE 64
#define CFG_TUH_HID_EPOUT_BUFSIZE 64
Expand Down
126 changes: 125 additions & 1 deletion src/firmware/include/tusb_config.h
Original file line number Diff line number Diff line change
@@ -1,2 +1,126 @@
// autogenerated by QuokkADB's platform wizio-pico if deleted
#include "quokkadb_tusb_config.h"
//#include "quokkadb_tusb_config.h"

/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Ha Thach (tinyusb.org)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
*/

#ifndef _TUSB_CONFIG_H_
#define _TUSB_CONFIG_H_

#ifdef __cplusplus
extern "C" {
#endif

//--------------------------------------------------------------------
// Common Configuration
//--------------------------------------------------------------------
#define CFG_TUSB_MCU OPT_MCU_RP2040
// defined by compiler flags for flexibility
#ifndef CFG_TUSB_MCU
#error CFG_TUSB_MCU must be defined
#endif

#ifndef CFG_TUSB_OS
#define CFG_TUSB_OS OPT_OS_NONE
#endif

#ifndef CFG_TUSB_DEBUG
#define CFG_TUSB_DEBUG 0
#endif

/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment.
* Tinyusb use follows macros to declare transferring memory so that they can be put
* into those specific section.
* e.g
* - CFG_TUSB_MEM SECTION : __attribute__ (( section(".usb_ram") ))
* - CFG_TUSB_MEM_ALIGN : __attribute__ ((aligned(4)))
*/
#ifndef CFG_TUH_MEM_SECTION
#define CFG_TUH_MEM_SECTION
#endif

#ifndef CFG_TUH_MEM_ALIGN
#define CFG_TUH_MEM_ALIGN __attribute__ ((aligned(4)))
#endif

//--------------------------------------------------------------------
// Host Configuration
//--------------------------------------------------------------------

// Enable Host stack
#define CFG_TUH_ENABLED 1

#if CFG_TUSB_MCU == OPT_MCU_RP2040
// #define CFG_TUH_RPI_PIO_USB 1 // use pio-usb as host controller
// #define CFG_TUH_RPI_PIO_USB 1 // use max3421 as host controller

// host roothub port is 1 if using either pio-usb or max3421
#if (defined(CFG_TUH_RPI_PIO_USB) && CFG_TUH_RPI_PIO_USB) || (defined(CFG_TUH_MAX3421) && CFG_TUH_MAX3421)
#define BOARD_TUH_RHPORT 1
#endif
#endif

// Default is max speed that hardware controller could support with on-chip PHY
#define CFG_TUH_MAX_SPEED BOARD_TUH_MAX_SPEED

//------------------------- Board Specific --------------------------

// RHPort number used for host can be defined by board.mk, default to port 0
#ifndef BOARD_TUH_RHPORT
#define BOARD_TUH_RHPORT 0
#endif

// RHPort max operational speed can defined by board.mk
#ifndef BOARD_TUH_MAX_SPEED
#define BOARD_TUH_MAX_SPEED OPT_MODE_DEFAULT_SPEED
#endif

//--------------------------------------------------------------------
// Driver Configuration
//--------------------------------------------------------------------

// Size of buffer to hold descriptors and other data used for enumeration
#define CFG_TUH_ENUMERATION_BUFSIZE 256

#define CFG_TUH_HUB 1 // number of supported hubs
#define CFG_TUH_CDC 0 // CDC ACM
#define CFG_TUH_CDC_FTDI 0 // FTDI Serial. FTDI is not part of CDC class, only to re-use CDC driver API
#define CFG_TUH_CDC_CP210X 0 // CP210x Serial. CP210X is not part of CDC class, only to re-use CDC driver API
#define CFG_TUH_HID (3*CFG_TUH_DEVICE_MAX) // typical keyboard + mouse device can have 3-4 HID interfaces
#define CFG_TUH_MSC 1
#define CFG_TUH_VENDOR 0

// max device support (excluding hub device): 1 hub typically has 4 ports
#define CFG_TUH_DEVICE_MAX (3*CFG_TUH_HUB + 1)

//------------- HID -------------//
#define CFG_TUH_HID_EPIN_BUFSIZE 64
#define CFG_TUH_HID_EPOUT_BUFSIZE 64

#ifdef __cplusplus
}
#endif

#endif /* _TUSB_CONFIG_H_ */
83 changes: 83 additions & 0 deletions src/firmware/lib/QuokkADB/src/usbhost_msc.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@

// MSC - mass storage device host
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 Ha Thach (tinyusb.org)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
*/

#include "tusb.h"
#include "log_cache.h"
#include <class/msc/msc_host.h>
#include "blink.h"

//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+
static scsi_inquiry_resp_t inquiry_resp;

bool inquiry_complete_cb(uint8_t dev_addr, tuh_msc_complete_data_t const * cb_data)
{
msc_cbw_t const* cbw = cb_data->cbw;
msc_csw_t const* csw = cb_data->csw;

if (csw->status != 0)
{
logmsg("Inquiry failed\r\n");
return false;
}

// Print out Vendor ID, Product ID and Rev
char vendor_id[9] = {0};
char product_id[17] = {0};
char product_rev[5] = {0};
memcpy(vendor_id, inquiry_resp.vendor_id, sizeof(inquiry_resp.vendor_id));
memcpy(product_id, inquiry_resp.product_id, sizeof(inquiry_resp.product_id));
memcpy(product_rev, inquiry_resp.product_rev, sizeof( inquiry_resp.product_rev));
logmsg(vendor_id, ":", product_id, " rev", product_rev);

// Get capacity of device
uint32_t const block_count = tuh_msc_get_block_count(dev_addr, cbw->lun);
uint32_t const block_size = tuh_msc_get_block_size(dev_addr, cbw->lun);

logmsg("Disk Size: ",(int)(block_count / ((1024*1024)/block_size)), "MB");
logmsg("Block Count = ",(int) block_count," Block Size: ", (int)block_size);

return true;
}

//------------- IMPLEMENTATION -------------//
void tuh_msc_mount_cb(uint8_t dev_addr)
{
blink_led.blink(3);
logmsg("A MassStorage device is mounted");

uint8_t const lun = 0;
tuh_msc_inquiry(dev_addr, lun, &inquiry_resp, inquiry_complete_cb, 0);
}

void tuh_msc_umount_cb(uint8_t dev_addr)
{
blink_led.blink(5);
(void) dev_addr;
logmsg("A MassStorage device is unmounted");
}
4 changes: 2 additions & 2 deletions src/firmware/platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ build_flags =
[env:quokkadb]
platform = https://github.com/maxgerhardt/platform-raspberrypi.git
platform_packages =
framework-arduinopico@https://github.com/rabbitholecomputing/arduino-pico.git#v3.6.0-tinyusb-0.16.0
framework-arduinopico@https://github.com/rabbitholecomputing/arduino-pico.git#v3.6.0-tinyusb-0.16.0msc
framework = arduino
board_build.core = earlephilhower
board = rhc_quokkadb_div4
board_build.ldscript = lib/QuokkADB/src/run_from_sram.ld
;board_build.ldscript = lib/QuokkADB/src/run_from_sram.ld
debug_tool = cmsis-dap
lib_deps =
usb
Expand Down

0 comments on commit eaab8cf

Please sign in to comment.