Begin pong
This commit is contained in:
parent
3e1d6d2fe7
commit
bcbe883c37
@ -13,7 +13,7 @@ pico_sdk_init()
|
|||||||
add_library(devicelib STATIC
|
add_library(devicelib STATIC
|
||||||
src/display.cpp
|
src/display.cpp
|
||||||
src/flash.cpp
|
src/flash.cpp
|
||||||
src/lib.cpp
|
src/devicelib.cpp
|
||||||
src/pixelstream.cpp
|
src/pixelstream.cpp
|
||||||
src/usb_descriptors.c
|
src/usb_descriptors.c
|
||||||
)
|
)
|
||||||
|
|||||||
37
include/devicelib.h
Normal file
37
include/devicelib.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#ifndef LIB_H
|
||||||
|
#define LIB_H
|
||||||
|
|
||||||
|
#include "display.h"
|
||||||
|
#include "flash.h"
|
||||||
|
#include "pixelstream.h"
|
||||||
|
|
||||||
|
#include <hardware/spi.h>
|
||||||
|
#include <pico/binary_info.h>
|
||||||
|
|
||||||
|
bi_decl(bi_program_feature_group(0x1111, 0, "Display Pinout"));
|
||||||
|
bi_decl(bi_ptr_int32(0x1111, 0, DISPLAY_SCK, 2));
|
||||||
|
bi_decl(bi_ptr_int32(0x1111, 0, DISPLAY_TX, 3));
|
||||||
|
bi_decl(bi_ptr_int32(0x1111, 0, DISPLAY_CS, 5));
|
||||||
|
bi_decl(bi_ptr_int32(0x1111, 0, DISPLAY_DC, 4));
|
||||||
|
|
||||||
|
bi_decl(bi_program_feature_group(0x1111, 1, "Flash Pinout"));
|
||||||
|
bi_decl(bi_ptr_int32(0x1111, 1, FLASH_SCK, 10));
|
||||||
|
bi_decl(bi_ptr_int32(0x1111, 1, FLASH_TX, 11));
|
||||||
|
bi_decl(bi_ptr_int32(0x1111, 1, FLASH_RX, 12));
|
||||||
|
bi_decl(bi_ptr_int32(0x1111, 1, FLASH_CS, 9));
|
||||||
|
bi_decl(bi_ptr_int32(0x1111, 1, FLASH_IO_2, 13));
|
||||||
|
bi_decl(bi_ptr_int32(0x1111, 1, FLASH_IO_3, 14));
|
||||||
|
|
||||||
|
bi_decl(bi_program_feature_group(0x1111, 2, "Buttons"));
|
||||||
|
bi_decl(bi_ptr_int32(0x1111, 2, BUTTON_LEFT, 15));
|
||||||
|
bi_decl(bi_ptr_int32(0x1111, 2, BUTTON_MIDDLE, 16));
|
||||||
|
bi_decl(bi_ptr_int32(0x1111, 2, BUTTON_RIGHT, 17));
|
||||||
|
|
||||||
|
namespace lib::detail
|
||||||
|
{
|
||||||
|
|
||||||
|
spi_inst_t* get_spi_instance(uint8_t gpio);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // LIB_H
|
||||||
@ -1,13 +0,0 @@
|
|||||||
#ifndef LIB_H
|
|
||||||
#define LIB_H
|
|
||||||
|
|
||||||
#include <hardware/spi.h>
|
|
||||||
|
|
||||||
namespace lib::detail
|
|
||||||
{
|
|
||||||
|
|
||||||
spi_inst_t* get_spi_instance(uint8_t gpio);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // LIB_H
|
|
||||||
@ -1,3 +1,4 @@
|
|||||||
cmake_minimum_required(VERSION 3.13)
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
|
||||||
add_subdirectory(mtgcard)
|
add_subdirectory(mtgcard)
|
||||||
|
add_subdirectory(pong)
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
#include "cardslot.h"
|
#include "cardslot.h"
|
||||||
#include "display.h"
|
#include "devicelib.h"
|
||||||
#include "flash.h"
|
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "pixelstream.h"
|
|
||||||
|
|
||||||
#include <hardware/clocks.h>
|
#include <hardware/clocks.h>
|
||||||
#include <pico/binary_info.h>
|
#include <pico/binary_info.h>
|
||||||
@ -15,25 +13,6 @@ using namespace lib;
|
|||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
|
||||||
bi_decl(bi_program_feature_group(0x1111, 0, "Display Pinout"));
|
|
||||||
bi_decl(bi_ptr_int32(0x1111, 0, DISPLAY_SCK, 2));
|
|
||||||
bi_decl(bi_ptr_int32(0x1111, 0, DISPLAY_TX, 3));
|
|
||||||
bi_decl(bi_ptr_int32(0x1111, 0, DISPLAY_CS, 5));
|
|
||||||
bi_decl(bi_ptr_int32(0x1111, 0, DISPLAY_DC, 4));
|
|
||||||
|
|
||||||
bi_decl(bi_program_feature_group(0x1111, 1, "Flash Pinout"));
|
|
||||||
bi_decl(bi_ptr_int32(0x1111, 1, FLASH_SCK, 10));
|
|
||||||
bi_decl(bi_ptr_int32(0x1111, 1, FLASH_TX, 11));
|
|
||||||
bi_decl(bi_ptr_int32(0x1111, 1, FLASH_RX, 12));
|
|
||||||
bi_decl(bi_ptr_int32(0x1111, 1, FLASH_CS, 9));
|
|
||||||
bi_decl(bi_ptr_int32(0x1111, 1, FLASH_IO_2, 13));
|
|
||||||
bi_decl(bi_ptr_int32(0x1111, 1, FLASH_IO_3, 14));
|
|
||||||
|
|
||||||
bi_decl(bi_program_feature_group(0x1111, 2, "Buttons"));
|
|
||||||
bi_decl(bi_ptr_int32(0x1111, 2, BUTTON_LEFT, 15));
|
|
||||||
bi_decl(bi_ptr_int32(0x1111, 2, BUTTON_MIDDLE, 16));
|
|
||||||
bi_decl(bi_ptr_int32(0x1111, 2, BUTTON_RIGHT, 17));
|
|
||||||
|
|
||||||
Display display(DISPLAY_SCK, DISPLAY_TX, DISPLAY_CS, DISPLAY_DC,
|
Display display(DISPLAY_SCK, DISPLAY_TX, DISPLAY_CS, DISPLAY_DC,
|
||||||
100 * 1000 * 1000);
|
100 * 1000 * 1000);
|
||||||
Flash flash(FLASH_SCK, FLASH_TX, FLASH_RX, FLASH_CS, 25 * 1000 * 1000);
|
Flash flash(FLASH_SCK, FLASH_TX, FLASH_RX, FLASH_CS, 25 * 1000 * 1000);
|
||||||
|
|||||||
13
programs/pong/CMakeLists.txt
Normal file
13
programs/pong/CMakeLists.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.13)
|
||||||
|
|
||||||
|
add_executable(pong
|
||||||
|
src/main.cpp
|
||||||
|
|
||||||
|
${ICON_SOURCES}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(pong PRIVATE include)
|
||||||
|
|
||||||
|
target_link_libraries(pong PRIVATE devicelib)
|
||||||
|
|
||||||
|
pico_add_extra_outputs(pong)
|
||||||
115
programs/pong/src/main.cpp
Normal file
115
programs/pong/src/main.cpp
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
#include "devicelib.h"
|
||||||
|
|
||||||
|
#include <hardware/clocks.h>
|
||||||
|
#include <pico/bootrom.h>
|
||||||
|
#include <tusb.h>
|
||||||
|
|
||||||
|
using namespace lib;
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
Display display(DISPLAY_SCK, DISPLAY_TX, DISPLAY_CS, DISPLAY_DC,
|
||||||
|
100 * 1000 * 1000);
|
||||||
|
Flash flash(FLASH_SCK, FLASH_TX, FLASH_RX, FLASH_CS, 25 * 1000 * 1000);
|
||||||
|
|
||||||
|
void draw_rectangle(float x, float y, float w, float h, uint8_t r, uint8_t g,
|
||||||
|
uint8_t b)
|
||||||
|
{
|
||||||
|
int wi = w;
|
||||||
|
int hi = h;
|
||||||
|
display.set_update_area(x - w / 2, y - h / 2, wi, hi);
|
||||||
|
|
||||||
|
auto pixels = display.pixels();
|
||||||
|
for (int i = 0; i < (wi + 1) * (hi + 1); i++)
|
||||||
|
{
|
||||||
|
pixels.write(r, g, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
set_sys_clock_khz(150 * 1000, false);
|
||||||
|
|
||||||
|
gpio_set_function(FLASH_IO_2, GPIO_FUNC_SIO);
|
||||||
|
gpio_set_function(FLASH_IO_3, GPIO_FUNC_SIO);
|
||||||
|
|
||||||
|
gpio_set_dir(FLASH_IO_2, GPIO_OUT);
|
||||||
|
gpio_set_dir(FLASH_IO_3, GPIO_OUT);
|
||||||
|
|
||||||
|
gpio_put(FLASH_IO_2, 1);
|
||||||
|
gpio_put(FLASH_IO_3, 1);
|
||||||
|
|
||||||
|
gpio_set_function(BUTTON_LEFT, GPIO_FUNC_SIO);
|
||||||
|
gpio_set_function(BUTTON_MIDDLE, GPIO_FUNC_SIO);
|
||||||
|
gpio_set_function(BUTTON_RIGHT, GPIO_FUNC_SIO);
|
||||||
|
|
||||||
|
gpio_set_dir(BUTTON_LEFT, GPIO_IN);
|
||||||
|
gpio_set_dir(BUTTON_MIDDLE, GPIO_IN);
|
||||||
|
gpio_set_dir(BUTTON_RIGHT, GPIO_IN);
|
||||||
|
|
||||||
|
gpio_pull_up(BUTTON_LEFT);
|
||||||
|
gpio_pull_up(BUTTON_MIDDLE);
|
||||||
|
gpio_pull_up(BUTTON_RIGHT);
|
||||||
|
|
||||||
|
tusb_rhport_init_t dev_init
|
||||||
|
= { .role = TUSB_ROLE_DEVICE, .speed = TUSB_SPEED_AUTO };
|
||||||
|
tud_init(0);
|
||||||
|
|
||||||
|
absolute_time_t previous_time = get_absolute_time();
|
||||||
|
float time_since_last_display = 0;
|
||||||
|
|
||||||
|
constexpr float SPEED = 100;
|
||||||
|
float paddle_x = 120;
|
||||||
|
constexpr float paddle_y = 280;
|
||||||
|
|
||||||
|
uint8_t left_history = 0;
|
||||||
|
uint8_t right_history = 0;
|
||||||
|
|
||||||
|
bool moved = true;
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
tud_task();
|
||||||
|
absolute_time_t current = get_absolute_time();
|
||||||
|
float dt = absolute_time_diff_us(previous_time, current) / 1000000.0f;
|
||||||
|
previous_time = current;
|
||||||
|
|
||||||
|
float old_pos = paddle_x;
|
||||||
|
|
||||||
|
left_history = (left_history << 1) | !gpio_get(BUTTON_LEFT);
|
||||||
|
right_history = (right_history << 1) | !gpio_get(BUTTON_RIGHT);
|
||||||
|
|
||||||
|
if (left_history == 0xFF)
|
||||||
|
{
|
||||||
|
paddle_x -= SPEED * dt;
|
||||||
|
moved = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (right_history == 0xFF)
|
||||||
|
{
|
||||||
|
paddle_x += SPEED * dt;
|
||||||
|
moved = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
time_since_last_display += dt;
|
||||||
|
|
||||||
|
if (moved && time_since_last_display > 0.016f)
|
||||||
|
{
|
||||||
|
moved = false;
|
||||||
|
draw_rectangle(old_pos, paddle_y, 50, 7, 0, 0, 0);
|
||||||
|
draw_rectangle(paddle_x, paddle_y, 40, 5, 0xFF, 0xFF, 0xFF);
|
||||||
|
time_since_last_display = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void tud_vendor_rx_cb(uint8_t itf, const uint8_t* buffer, uint16_t bufsize)
|
||||||
|
{
|
||||||
|
if (buffer[0] == 0x99)
|
||||||
|
{
|
||||||
|
rom_reset_usb_boot(0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,4 @@
|
|||||||
#include "lib.h"
|
#include "devicelib.h"
|
||||||
|
|
||||||
using namespace lib;
|
using namespace lib;
|
||||||
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
#include "display.h"
|
#include "display.h"
|
||||||
|
|
||||||
#include "lib.h"
|
#include "devicelib.h"
|
||||||
#include "pixelstream.h"
|
#include "pixelstream.h"
|
||||||
|
|
||||||
#include <hardware/spi.h>
|
#include <hardware/spi.h>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
#include "flash.h"
|
#include "flash.h"
|
||||||
|
|
||||||
#include "lib.h"
|
#include "devicelib.h"
|
||||||
|
|
||||||
#include <pico/stdlib.h>
|
#include <pico/stdlib.h>
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user