mirror of
https://github.com/Ikatono/stream_pad.git
synced 2025-10-29 04:56:01 -05:00
a bunch of updates, built uf2 files don't seem to work even with demos
This commit is contained in:
53
CMakeLists.txt
Normal file
53
CMakeLists.txt
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.20)
|
||||||
|
|
||||||
|
set(ENV{PICO_SDK_PATH} ${CMAKE_CURRENT_LIST_DIR}/pico-sdk)
|
||||||
|
set(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_LIST_DIR}/FreeRTOS/FreeRTOS/Source)
|
||||||
|
set(PICO_BOARD adafruit_macropad_rp2040)
|
||||||
|
|
||||||
|
include(pico_sdk_import.cmake)
|
||||||
|
include(pico_extras_import_optional.cmake)
|
||||||
|
include(FreeRTOS_Kernel_import.cmake)
|
||||||
|
|
||||||
|
project(threeam C CXX ASM)
|
||||||
|
set(CMAKE_C_STANDARD 11)
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
|
add_executable(stream_pad)
|
||||||
|
|
||||||
|
pico_sdk_init()
|
||||||
|
|
||||||
|
pico_generate_pio_header(stream_pad ${CMAKE_CURRENT_LIST_DIR}/src/Neopixel.pio)
|
||||||
|
|
||||||
|
target_sources(stream_pad PRIVATE
|
||||||
|
src/main.cpp
|
||||||
|
src/Page.cpp
|
||||||
|
src/Config.cpp
|
||||||
|
src/Neopixels.cpp
|
||||||
|
src/ReadKeys.cpp
|
||||||
|
src/Wheel.cpp
|
||||||
|
#this is definitely wrong
|
||||||
|
#pico-sdk/src/rp2_common/hardware_gpio/include/hardware/
|
||||||
|
EmbeddedProto/src/Fields.cpp
|
||||||
|
EmbeddedProto/src/MessageInterface.cpp
|
||||||
|
EmbeddedProto/src/ReadBufferSection.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(stream_pad PRIVATE
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/src/
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/src/protogen/
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/EmbeddedProto/src/
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/tinyusb/
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(stream_pad
|
||||||
|
pico_stdlib
|
||||||
|
hardware_pio
|
||||||
|
pico_unique_id
|
||||||
|
#tinyusb_device
|
||||||
|
#tinyusb_board
|
||||||
|
)
|
||||||
|
|
||||||
|
pico_enable_stdio_usb(stream_pad 0)
|
||||||
|
pico_enable_stdio_uart(stream_pad 1)
|
||||||
|
|
||||||
|
pico_add_extra_outputs(stream_pad)
|
||||||
62
FreeRTOS_Kernel_import.cmake
Normal file
62
FreeRTOS_Kernel_import.cmake
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# This is a copy of <FREERTOS_KERNEL_PATH>/portable/ThirdParty/GCC/RP2040/FREERTOS_KERNEL_import.cmake
|
||||||
|
|
||||||
|
# This can be dropped into an external project to help locate the FreeRTOS kernel
|
||||||
|
# It should be include()ed prior to project(). Alternatively this file may
|
||||||
|
# or the CMakeLists.txt in this directory may be included or added via add_subdirectory
|
||||||
|
# respectively.
|
||||||
|
|
||||||
|
if (DEFINED ENV{FREERTOS_KERNEL_PATH} AND (NOT FREERTOS_KERNEL_PATH))
|
||||||
|
set(FREERTOS_KERNEL_PATH $ENV{FREERTOS_KERNEL_PATH})
|
||||||
|
message("Using FREERTOS_KERNEL_PATH from environment ('${FREERTOS_KERNEL_PATH}')")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set(FREERTOS_KERNEL_RP2040_RELATIVE_PATH "portable/ThirdParty/GCC/RP2040")
|
||||||
|
# undo the above
|
||||||
|
set(FREERTOS_KERNEL_RP2040_BACK_PATH "../../../..")
|
||||||
|
|
||||||
|
if (NOT FREERTOS_KERNEL_PATH)
|
||||||
|
# check if we are inside the FreeRTOS kernel tree (i.e. this file has been included directly)
|
||||||
|
get_filename_component(_ACTUAL_PATH ${CMAKE_CURRENT_LIST_DIR} REALPATH)
|
||||||
|
get_filename_component(_POSSIBLE_PATH ${CMAKE_CURRENT_LIST_DIR}/${FREERTOS_KERNEL_RP2040_BACK_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH} REALPATH)
|
||||||
|
if (_ACTUAL_PATH STREQUAL _POSSIBLE_PATH)
|
||||||
|
get_filename_component(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_LIST_DIR}/${FREERTOS_KERNEL_RP2040_BACK_PATH} REALPATH)
|
||||||
|
endif()
|
||||||
|
if (_ACTUAL_PATH STREQUAL _POSSIBLE_PATH)
|
||||||
|
get_filename_component(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_LIST_DIR}/${FREERTOS_KERNEL_RP2040_BACK_PATH} REALPATH)
|
||||||
|
message("Setting FREERTOS_KERNEL_PATH to ${FREERTOS_KERNEL_PATH} based on location of FreeRTOS-Kernel-import.cmake")
|
||||||
|
elseif (PICO_SDK_PATH AND EXISTS "${PICO_SDK_PATH}/../FreeRTOS-Kernel")
|
||||||
|
set(FREERTOS_KERNEL_PATH ${PICO_SDK_PATH}/../FreeRTOS-Kernel)
|
||||||
|
message("Defaulting FREERTOS_KERNEL_PATH as sibling of PICO_SDK_PATH: ${FREERTOS_KERNEL_PATH}")
|
||||||
|
endif()
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (NOT FREERTOS_KERNEL_PATH)
|
||||||
|
foreach(POSSIBLE_SUFFIX Source FreeRTOS-Kernel FreeRTOS/Source)
|
||||||
|
# check if FreeRTOS-Kernel exists under directory that included us
|
||||||
|
set(SEARCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}})
|
||||||
|
set(SEARCH_ROOT ../../../..)
|
||||||
|
get_filename_component(_POSSIBLE_PATH ${SEARCH_ROOT}/${POSSIBLE_SUFFIX} REALPATH)
|
||||||
|
if (EXISTS ${_POSSIBLE_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}/CMakeLists.txt)
|
||||||
|
get_filename_component(FREERTOS_KERNEL_PATH ${_POSSIBLE_PATH} REALPATH)
|
||||||
|
message("Setting FREERTOS_KERNEL_PATH to '${FREERTOS_KERNEL_PATH}' found relative to enclosing project")
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT FREERTOS_KERNEL_PATH)
|
||||||
|
message(FATAL_ERROR "FreeRTOS location was not specified. Please set FREERTOS_KERNEL_PATH.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(FREERTOS_KERNEL_PATH "${FREERTOS_KERNEL_PATH}" CACHE PATH "Path to the FreeRTOS Kernel")
|
||||||
|
|
||||||
|
get_filename_component(FREERTOS_KERNEL_PATH "${FREERTOS_KERNEL_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
|
||||||
|
if (NOT EXISTS ${FREERTOS_KERNEL_PATH})
|
||||||
|
message(FATAL_ERROR "Directory '${FREERTOS_KERNEL_PATH}' not found")
|
||||||
|
endif()
|
||||||
|
if (NOT EXISTS ${FREERTOS_KERNEL_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}/CMakeLists.txt)
|
||||||
|
message(FATAL_ERROR "Directory '${FREERTOS_KERNEL_PATH}' does not contain an RP2040 port here: ${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}")
|
||||||
|
endif()
|
||||||
|
set(FREERTOS_KERNEL_PATH ${FREERTOS_KERNEL_PATH} CACHE PATH "Path to the FreeRTOS_KERNEL" FORCE)
|
||||||
|
|
||||||
|
add_subdirectory(${FREERTOS_KERNEL_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH} FREERTOS_KERNEL)
|
||||||
48
src/Neopixels.cpp
Normal file
48
src/Neopixels.cpp
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
#include "Neopixels.hpp"
|
||||||
|
#include <cstdint>
|
||||||
|
#include "Neopixel.pio.h"
|
||||||
|
//#include "Pinmap.hpp"
|
||||||
|
#include "hardware/gpio.h"
|
||||||
|
|
||||||
|
#define NEO_PIO pio0
|
||||||
|
|
||||||
|
namespace LED
|
||||||
|
{
|
||||||
|
static int state_machine;
|
||||||
|
void init_neopixels(Pin::pin_t pin)
|
||||||
|
{
|
||||||
|
constexpr float NEOPIXEL_FREQ = 800000;
|
||||||
|
static bool initialized = false;
|
||||||
|
if (!initialized)
|
||||||
|
{
|
||||||
|
PIO pio = NEO_PIO;
|
||||||
|
auto offset = pio_add_program(pio, &ws2812_program);
|
||||||
|
state_machine = pio_claim_unused_sm(pio, true);
|
||||||
|
ws2812_program_init(pio, state_machine, offset, pin, NEOPIXEL_FREQ, false);
|
||||||
|
initialized = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void write_leds(Configuration::Pixel *buffer)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
void put_pixel(Configuration::Pixel pixel)
|
||||||
|
{
|
||||||
|
pio_sm_put_blocking(NEO_PIO, state_machine, pixel.value);
|
||||||
|
}
|
||||||
|
void init_notification_led()
|
||||||
|
{
|
||||||
|
gpio_init(Pin::LED);
|
||||||
|
//gpio_set_function(Pin::LED, GPIO_FUNC_SIO);
|
||||||
|
gpio_set_input_enabled(Pin::LED, false);
|
||||||
|
gpio_put(Pin::LED, false);
|
||||||
|
}
|
||||||
|
void set_notification_led(bool value)
|
||||||
|
{
|
||||||
|
gpio_put(Pin::LED, value);
|
||||||
|
}
|
||||||
|
bool get_notification_led()
|
||||||
|
{
|
||||||
|
return gpio_get(Pin::LED);
|
||||||
|
}
|
||||||
|
}
|
||||||
18
src/Neopixels.hpp
Normal file
18
src/Neopixels.hpp
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#ifndef H_594B306D782340DC94F812F498931430
|
||||||
|
#define H_594B306D782340DC94F812F498931430
|
||||||
|
|
||||||
|
#include "Pinmap.hpp"
|
||||||
|
#include "Pixel.hpp"
|
||||||
|
|
||||||
|
namespace LED
|
||||||
|
{
|
||||||
|
void init_neopixels(Pin::pin_t pin);
|
||||||
|
void write_leds(Configuration::Pixel *buffer);
|
||||||
|
void put_pixel(Configuration::Pixel pixel);
|
||||||
|
void init_notification_led();
|
||||||
|
void set_notification_led(bool value);
|
||||||
|
bool get_notification_led();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif //H_594B306D782340DC94F812F498931430
|
||||||
35
src/Pinmap.hpp
Normal file
35
src/Pinmap.hpp
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#ifndef H_FCF0432A49E34C2DA99E0085234840A5
|
||||||
|
#define H_FCF0432A49E34C2DA99E0085234840A5
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
namespace Pin
|
||||||
|
{
|
||||||
|
using pin_t = unsigned int;
|
||||||
|
constexpr pin_t InvalidPin = std::numeric_limits<pin_t>::max();
|
||||||
|
constexpr pin_t WheelButton = 0;
|
||||||
|
constexpr pin_t WheelA = 17;
|
||||||
|
constexpr pin_t WheelB = 18;
|
||||||
|
constexpr pin_t Key(uint32_t key_number)
|
||||||
|
{
|
||||||
|
if (1 <= key_number <= 12)
|
||||||
|
return static_cast<pin_t>(key_number);
|
||||||
|
return InvalidPin;
|
||||||
|
}
|
||||||
|
constexpr pin_t OLED_CS = 22;
|
||||||
|
constexpr pin_t OLED_RESET = 23;
|
||||||
|
constexpr pin_t OLED_DC = 24;
|
||||||
|
constexpr pin_t SCK = 26;
|
||||||
|
constexpr pin_t MOSI = 27;
|
||||||
|
constexpr pin_t MISO = 28;
|
||||||
|
|
||||||
|
constexpr pin_t NEOPIXEL = 19;
|
||||||
|
|
||||||
|
constexpr pin_t LED = 13;
|
||||||
|
constexpr pin_t SPEAKER_SHUTDOWN = 14;
|
||||||
|
constexpr pin_t SPEAKER = 16;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //H_FCF0432A49E34C2DA99E0085234840A5
|
||||||
42
src/ReadKeys.cpp
Normal file
42
src/ReadKeys.cpp
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
#include "ReadKeys.hpp"
|
||||||
|
#include "Pinmap.hpp"
|
||||||
|
#include "hardware/gpio.h"
|
||||||
|
|
||||||
|
namespace Hardware
|
||||||
|
{
|
||||||
|
bool KeyState::get_pin(int pinnum) const
|
||||||
|
{
|
||||||
|
return data & (1 << pinnum);
|
||||||
|
}
|
||||||
|
void KeyState::set_pin(int pinnum, bool value)
|
||||||
|
{
|
||||||
|
if (value)
|
||||||
|
data |= (1 << pinnum);
|
||||||
|
else
|
||||||
|
data &= ~(1 << pinnum);
|
||||||
|
}
|
||||||
|
void init_keys()
|
||||||
|
{
|
||||||
|
static bool initialized = false;
|
||||||
|
if (!initialized)
|
||||||
|
{
|
||||||
|
gpio_init_mask(key_pins());
|
||||||
|
for (uint32_t i = 1; i <= 12; i++)
|
||||||
|
{
|
||||||
|
//gpio_set_function(Pin::Key(i), GPIO_FUNC_SIO);
|
||||||
|
gpio_set_input_enabled(Pin::Key(i), true);
|
||||||
|
gpio_pull_up(Pin::Key(i));
|
||||||
|
}
|
||||||
|
initialized = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
KeyState read_keys()
|
||||||
|
{
|
||||||
|
uint32_t raw = gpio_get_all();
|
||||||
|
KeyState state;
|
||||||
|
for (int i = 1; i <= 12; i++)
|
||||||
|
if (raw & (1 << i))
|
||||||
|
state.set_pin(i, true);
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
39
src/ReadKeys.hpp
Normal file
39
src/ReadKeys.hpp
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#ifndef H_010DEF16FF074C9DAAD8143DF189A536
|
||||||
|
#define H_010DEF16FF074C9DAAD8143DF189A536
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include "Pinmap.hpp"
|
||||||
|
#include <iterator>
|
||||||
|
|
||||||
|
namespace Hardware
|
||||||
|
{
|
||||||
|
constexpr unsigned int key_pins()
|
||||||
|
{
|
||||||
|
uint32_t pins = 0;
|
||||||
|
for (int i = 1; i <= 12; i++)
|
||||||
|
pins |= Pin::Key(i);
|
||||||
|
return pins;
|
||||||
|
}
|
||||||
|
struct KeyState
|
||||||
|
{
|
||||||
|
//might implement an iterator eventually
|
||||||
|
// struct Iterator
|
||||||
|
// {
|
||||||
|
// using iterator_category = std::random_access_iterator_tag;
|
||||||
|
// using difference_type = int;
|
||||||
|
// using value_type = bool;
|
||||||
|
// using pointer = bool*;
|
||||||
|
// using reference = bool&;
|
||||||
|
|
||||||
|
// private:
|
||||||
|
|
||||||
|
// };
|
||||||
|
uint32_t data;
|
||||||
|
bool get_pin(int pinnum) const;
|
||||||
|
void set_pin(int pinnum, bool value);
|
||||||
|
};
|
||||||
|
void init_keys();
|
||||||
|
KeyState read_keys();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //H_010DEF16FF074C9DAAD8143DF189A536
|
||||||
17
src/Speaker.cpp
Normal file
17
src/Speaker.cpp
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#include "Speaker.hpp"
|
||||||
|
|
||||||
|
namespace Hardware
|
||||||
|
{
|
||||||
|
void init_speaker()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
void speaker_set_tone(float hz)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
void speaker_off()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
11
src/Speaker.hpp
Normal file
11
src/Speaker.hpp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#ifndef H_9C70317050DA422699F985336969FE03
|
||||||
|
#define H_9C70317050DA422699F985336969FE03
|
||||||
|
|
||||||
|
namespace Hardware
|
||||||
|
{
|
||||||
|
void init_speaker();
|
||||||
|
void speaker_set_tone(float hz);
|
||||||
|
void speaker_off();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //H_9C70317050DA422699F985336969FE03
|
||||||
27
src/Wheel.cpp
Normal file
27
src/Wheel.cpp
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#include "Wheel.hpp"
|
||||||
|
#include "hardware/gpio.h"
|
||||||
|
#include "Pinmap.hpp"
|
||||||
|
|
||||||
|
namespace Hardware
|
||||||
|
{
|
||||||
|
void init_wheel()
|
||||||
|
{
|
||||||
|
gpio_init_mask(
|
||||||
|
(1 << Pin::WheelA)
|
||||||
|
| (1 << Pin::WheelB)
|
||||||
|
| (1 << Pin::WheelButton));
|
||||||
|
gpio_set_input_enabled(Pin::WheelA, true);
|
||||||
|
gpio_set_input_enabled(Pin::WheelB, true);
|
||||||
|
gpio_set_input_enabled(Pin::WheelButton, true);
|
||||||
|
gpio_pull_up(Pin::WheelButton);
|
||||||
|
}
|
||||||
|
WheelState get_wheel_state()
|
||||||
|
{
|
||||||
|
WheelState state;
|
||||||
|
auto pins = gpio_get_all();
|
||||||
|
state.a = (pins & (1 << Pin::WheelA)) != 0;
|
||||||
|
state.b = (pins & (1 << Pin::WheelB)) != 0;
|
||||||
|
state.button = (pins & (1 << Pin::WheelButton)) != 0;
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
19
src/Wheel.hpp
Normal file
19
src/Wheel.hpp
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#ifndef H_A2D3745FDEDC4DAF9F72E30E5E782C5B
|
||||||
|
#define H_A2D3745FDEDC4DAF9F72E30E5E782C5B
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
namespace Hardware
|
||||||
|
{
|
||||||
|
struct WheelState
|
||||||
|
{
|
||||||
|
bool a;
|
||||||
|
bool b;
|
||||||
|
bool button;
|
||||||
|
int32_t count;
|
||||||
|
};
|
||||||
|
void init_wheel();
|
||||||
|
WheelState get_wheel_state();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //H_A2D3745FDEDC4DAF9F72E30E5E782C5B
|
||||||
26
src/main.cpp
26
src/main.cpp
@@ -3,9 +3,11 @@
|
|||||||
#include "ProtoConfig.h"
|
#include "ProtoConfig.h"
|
||||||
#include "ReadBufferInterface.h"
|
#include "ReadBufferInterface.h"
|
||||||
#include "ReadBufferFixedSize.h"
|
#include "ReadBufferFixedSize.h"
|
||||||
//#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "pico/stdlib.h"
|
#include "pico/stdlib.h"
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include "Neopixels.hpp"
|
||||||
|
#include "ReadKeys.hpp"
|
||||||
|
|
||||||
constexpr uint32_t MAX_KEY_PRESSES = 5;
|
constexpr uint32_t MAX_KEY_PRESSES = 5;
|
||||||
constexpr uint32_t MAX_STR_LENGTH = 50;
|
constexpr uint32_t MAX_STR_LENGTH = 50;
|
||||||
@@ -27,7 +29,27 @@ char config_buffer[1024];
|
|||||||
extern "C"
|
extern "C"
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
stdio_init_all();
|
//stdio_init_all();
|
||||||
|
//sleep_ms(10 * 1000);
|
||||||
|
//puts("boot\n");
|
||||||
|
//printf("boot\n");
|
||||||
|
// LED::init_neopixels(Pin::NEOPIXEL);
|
||||||
|
// Configuration::Pixel pix;
|
||||||
|
// pix.red() = 100;
|
||||||
|
// pix.green() = 100;
|
||||||
|
// pix.blue() = 100;
|
||||||
|
// for (int i = 0; i < 12; i++)
|
||||||
|
// LED::put_pixel(pix);
|
||||||
|
// Hardware::init_keys();
|
||||||
|
LED::init_notification_led();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
auto keys = Hardware::read_keys();
|
||||||
|
LED::set_notification_led(keys.data != 0);
|
||||||
|
printf("Keys: {}\n", keys.data);
|
||||||
|
sleep_ms(1000);
|
||||||
|
}
|
||||||
|
//block scope to keep the deserialized config around as little as possible
|
||||||
{
|
{
|
||||||
EmbeddedProto::ReadBufferFixedSize<BUFFER_SIZE> buffer;
|
EmbeddedProto::ReadBufferFixedSize<BUFFER_SIZE> buffer;
|
||||||
ConfigDeser config_message;
|
ConfigDeser config_message;
|
||||||
|
|||||||
111
src/tusb_config.h
Normal file
111
src/tusb_config.h
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
// defined by board.mk
|
||||||
|
#ifndef CFG_TUSB_MCU
|
||||||
|
#error CFG_TUSB_MCU must be defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// RHPort number used for device can be defined by board.mk, default to port 0
|
||||||
|
#ifndef BOARD_DEVICE_RHPORT_NUM
|
||||||
|
#define BOARD_DEVICE_RHPORT_NUM 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// RHPort max operational speed can defined by board.mk
|
||||||
|
// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed
|
||||||
|
#ifndef BOARD_DEVICE_RHPORT_SPEED
|
||||||
|
#if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \
|
||||||
|
CFG_TUSB_MCU == OPT_MCU_NUC505 || CFG_TUSB_MCU == OPT_MCU_CXD56 || CFG_TUSB_MCU == OPT_MCU_SAMX7X)
|
||||||
|
#define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_HIGH_SPEED
|
||||||
|
#else
|
||||||
|
#define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_FULL_SPEED
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Device mode with rhport and speed defined by board.mk
|
||||||
|
#if BOARD_DEVICE_RHPORT_NUM == 0
|
||||||
|
#define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED)
|
||||||
|
#elif BOARD_DEVICE_RHPORT_NUM == 1
|
||||||
|
#define CFG_TUSB_RHPORT1_MODE (OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED)
|
||||||
|
#else
|
||||||
|
#error "Incorrect RHPort configuration"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CFG_TUSB_OS
|
||||||
|
#define CFG_TUSB_OS OPT_OS_NONE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// CFG_TUSB_DEBUG is defined by compiler in DEBUG build
|
||||||
|
// #define CFG_TUSB_DEBUG 0
|
||||||
|
|
||||||
|
/* 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_TUSB_MEM_SECTION
|
||||||
|
#define CFG_TUSB_MEM_SECTION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CFG_TUSB_MEM_ALIGN
|
||||||
|
#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// DEVICE CONFIGURATION
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef CFG_TUD_ENDPOINT0_SIZE
|
||||||
|
#define CFG_TUD_ENDPOINT0_SIZE 64
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//------------- CLASS -------------//
|
||||||
|
#define CFG_TUD_HID 1
|
||||||
|
#define CFG_TUD_CDC 0
|
||||||
|
#define CFG_TUD_MSC 0
|
||||||
|
#define CFG_TUD_MIDI 0
|
||||||
|
#define CFG_TUD_VENDOR 0
|
||||||
|
|
||||||
|
// HID buffer size Should be sufficient to hold ID (if any) + Data
|
||||||
|
#define CFG_TUD_HID_EP_BUFSIZE 16
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _TUSB_CONFIG_H_ */
|
||||||
Reference in New Issue
Block a user