mirror of
https://github.com/Polprzewodnikowy/SummerCart64.git
synced 2025-02-22 06:37:10 +01:00

* isv support + usb/dd improvements * make room for saves * update offset * fixed debug address * idk * exception * ironed out all broken stuff * cleanup * return epc fix * better * more cleanup * even more cleanup * mooore cleanup * fixed printf * no assert * improved docker build, pyft232 instead of pyserial * fixed displaying long message strings description test * just straight cleanup * smallest cleanup * PAL * cpu buffer * n64 bootloader done * super slow usb storage reading implemented * reduced buffer size * usb gets fast * little cleanup * double buffered reads * removed separate event id * ISV in hardware finally * small exception changes * mac testing * py spacing * fsd write, rtc, isv and reset fixes * fixxx * good stopping point * usb fixed? * pretend we have 128 MB sdram * backup * chmod * test * test done * more tests * user rm * help * final fix * updated component values * nice asset names * cic 64dd support * ddipl enable separation * pre DMA rewrite, created dedicated buffer memory space, simplified code * dma rewrite, needs testing * moved xml * dd basics * timing * 64dd working yet again, isv brought back, dma fixes, usb path rewrite, pc code rewrite * added usb read functionality, general cleanup * changed mem addressing * added fpga flash update access * added mcu update * chmod * little cleanup * update format and stuff * fixes * uninitialized fix * small fixes * update fixes * update stuff done * fpga update tested * build time fix * boot fix * test timing * readme test * test 2 * reports * testseet * final * build test * forgot * button and naming * General cleanup And multiline commit message test * Exception screen UI touch ups * display separation and tests beginning * pc software update * pc software done * timing test * delete launch.json * sw fixes * fixed button hole diameter in shell * small cleanup, rpi testing * shell fillet fix, pc rtc printing * added cfg lock mechanism * moved lock to cfg address space * extended ROM and ISV fixes * preliminary sd card support * little sd card cleanup * sd menu fixes * 5 second limit * reduced shell thickness * basic led act blinking * faster sd menu loading * inst cache invalidate * sd card writing is working * SD card CSD and CID registers * wait for previous command * led error codes * fixed cfg_translate_address use * 64dd from sd card working * 64dd speedup and button handling * delayed address latching cycle - might break other builds, needs testing * bootloader improvements * small fixes * return previous cfg when setting new * cache stuff * unfloader debug protocol support * UNFLoader style debug command line support * requirements.txt * shell groove fillet * reset state inside controller * fixed fast PI read, added PI R/W fifo debug info * PI access prioritize * SD clock stop when RX FIFO is more than half full * flash erase method change * CFG error handling, TLOZ MM debug ISV support * CIC5167 support * general fixes * USB unplugged cable handling * turn off led when changing between error/act modes * rtc 2 bit clock stop support * line endings * Revert "line endings" This reverts commit d0ddfe5ec716d2db7c72561703f51a94bf34e6bb. * PI address debug * readme test * diagram update * diagram background * diagram background * diagram background * updated readme
93 lines
2.1 KiB
C
93 lines
2.1 KiB
C
#include <stdint.h>
|
|
#include "button.h"
|
|
#include "dd.h"
|
|
#include "fpga.h"
|
|
#include "usb.h"
|
|
|
|
|
|
#define BUTTON_COUNTER_TRIGGER_ON (64)
|
|
#define BUTTON_COUNTER_TRIGGER_OFF (0)
|
|
|
|
|
|
struct process {
|
|
uint8_t counter;
|
|
bool state;
|
|
button_mode_t mode;
|
|
bool trigger;
|
|
};
|
|
|
|
|
|
static struct process p;
|
|
|
|
|
|
bool button_get_state (void) {
|
|
return p.state;
|
|
}
|
|
|
|
bool button_set_mode (button_mode_t mode) {
|
|
if (mode > BUTTON_MODE_DD_DISK_SWAP) {
|
|
return true;
|
|
}
|
|
p.mode = mode;
|
|
if (p.mode == BUTTON_MODE_NONE) {
|
|
p.trigger = false;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
button_mode_t button_get_mode (void) {
|
|
return p.mode;
|
|
}
|
|
|
|
void button_init (void) {
|
|
p.counter = 0;
|
|
p.state = false;
|
|
p.mode = BUTTON_MODE_NONE;
|
|
p.trigger = false;
|
|
}
|
|
|
|
void button_process (void) {
|
|
usb_tx_info_t packet_info;
|
|
uint32_t status = fpga_reg_get(REG_CFG_SCR);
|
|
if (status & CFG_SCR_BUTTON_STATE) {
|
|
if (p.counter < BUTTON_COUNTER_TRIGGER_ON) {
|
|
p.counter += 1;
|
|
}
|
|
} else {
|
|
if (p.counter > BUTTON_COUNTER_TRIGGER_OFF) {
|
|
p.counter -= 1;
|
|
}
|
|
}
|
|
if (!p.state && p.counter == BUTTON_COUNTER_TRIGGER_ON) {
|
|
p.state = true;
|
|
p.trigger = true;
|
|
}
|
|
if (p.state && p.counter == BUTTON_COUNTER_TRIGGER_OFF) {
|
|
p.state = false;
|
|
}
|
|
if (p.trigger) {
|
|
switch (p.mode) {
|
|
case BUTTON_MODE_N64_IRQ:
|
|
fpga_reg_set(REG_CFG_CMD, CFG_CMD_IRQ);
|
|
p.trigger = false;
|
|
break;
|
|
|
|
case BUTTON_MODE_USB_PACKET:
|
|
usb_create_packet(&packet_info, PACKET_CMD_BUTTON_TRIGGER);
|
|
if (usb_enqueue_packet(&packet_info)) {
|
|
p.trigger = false;
|
|
}
|
|
break;
|
|
|
|
case BUTTON_MODE_DD_DISK_SWAP:
|
|
dd_handle_button();
|
|
p.trigger = false;
|
|
break;
|
|
|
|
default:
|
|
p.trigger = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|