Begin pong
This commit is contained in:
parent
3e1d6d2fe7
commit
bcbe883c37
@ -13,7 +13,7 @@ pico_sdk_init()
|
||||
add_library(devicelib STATIC
|
||||
src/display.cpp
|
||||
src/flash.cpp
|
||||
src/lib.cpp
|
||||
src/devicelib.cpp
|
||||
src/pixelstream.cpp
|
||||
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)
|
||||
|
||||
add_subdirectory(mtgcard)
|
||||
add_subdirectory(pong)
|
||||
|
||||
@ -1,8 +1,6 @@
|
||||
#include "cardslot.h"
|
||||
#include "display.h"
|
||||
#include "flash.h"
|
||||
#include "devicelib.h"
|
||||
#include "menu.h"
|
||||
#include "pixelstream.h"
|
||||
|
||||
#include <hardware/clocks.h>
|
||||
#include <pico/binary_info.h>
|
||||
@ -15,25 +13,6 @@ using namespace lib;
|
||||
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,
|
||||
100 * 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;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#include "display.h"
|
||||
|
||||
#include "lib.h"
|
||||
#include "devicelib.h"
|
||||
#include "pixelstream.h"
|
||||
|
||||
#include <hardware/spi.h>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#include "flash.h"
|
||||
|
||||
#include "lib.h"
|
||||
#include "devicelib.h"
|
||||
|
||||
#include <pico/stdlib.h>
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user