Begin pong

This commit is contained in:
shylie 2026-02-24 21:27:10 -05:00
parent 3e1d6d2fe7
commit bcbe883c37
10 changed files with 171 additions and 39 deletions

View File

@ -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
View 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

View File

@ -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

View File

@ -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)

View File

@ -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);

View 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
View 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);
}
}

View File

@ -1,4 +1,4 @@
#include "lib.h" #include "devicelib.h"
using namespace lib; using namespace lib;

View File

@ -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>

View File

@ -1,6 +1,6 @@
#include "flash.h" #include "flash.h"
#include "lib.h" #include "devicelib.h"
#include <pico/stdlib.h> #include <pico/stdlib.h>