mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2024-12-13 03:34:35 +00:00
Implemented write
This commit is contained in:
parent
50859171f4
commit
bb90fdc5fc
@ -10,3 +10,7 @@ uint32_t get_capacity(void) {
|
|||||||
bool_t read_block(uint32_t startblk, uint8_t *buf, uint32_t n) {
|
bool_t read_block(uint32_t startblk, uint8_t *buf, uint32_t n) {
|
||||||
return sdcRead(&SDCD1, startblk, buf, n);
|
return sdcRead(&SDCD1, startblk, buf, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool_t write_block(uint32_t startblk, uint8_t *buf, uint32_t n) {
|
||||||
|
return sdcWrite(&SDCD1, startblk, buf, n);
|
||||||
|
}
|
||||||
|
@ -6,5 +6,6 @@
|
|||||||
|
|
||||||
uint32_t get_capacity(void);
|
uint32_t get_capacity(void);
|
||||||
bool_t read_block(uint32_t startblk, uint8_t *buf, uint32_t n);
|
bool_t read_block(uint32_t startblk, uint8_t *buf, uint32_t n);
|
||||||
|
bool_t write_block(uint32_t startblk, uint8_t *buf, uint32_t n);
|
||||||
|
|
||||||
#endif /* __DISKIO_H__ */
|
#endif /* __DISKIO_H__ */
|
@ -39,26 +39,18 @@ CH_IRQ_HANDLER(Vector60) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//uint8_t buf[512];
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
|
||||||
sdcStart(&SDCD1, nullptr);
|
sdcStart(&SDCD1, nullptr);
|
||||||
if (sdcConnect(&SDCD1) == CH_FAILED) chDbgPanic("no sd card #1");
|
if (sdcConnect(&SDCD1) == CH_FAILED) chDbgPanic("no sd card #1");
|
||||||
|
|
||||||
// memset(&buf[0], 0, 512);
|
|
||||||
// if (sdcRead(&SDCD1, 0, &buf[0], 1) == CH_FAILED) chDbgPanic("no sd card #2");
|
|
||||||
|
|
||||||
|
|
||||||
start_usb();
|
start_usb();
|
||||||
|
|
||||||
// memset(&buf[0], 0, 512);
|
|
||||||
// if (sdcRead(&SDCD1, 0, &buf[0], 1) == CH_FAILED) chDbgPanic("no sd card #3");
|
|
||||||
|
|
||||||
//event_dispatcher.run();
|
|
||||||
while (true) {
|
while (true) {
|
||||||
usb_transfer();
|
usb_transfer();
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_usb();
|
stop_usb();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -6,17 +6,17 @@
|
|||||||
__asm__ __volatile__("bkpt 1")
|
__asm__ __volatile__("bkpt 1")
|
||||||
|
|
||||||
|
|
||||||
volatile bool usb_bulk_block_send = false;
|
volatile bool usb_bulk_block_done = false;
|
||||||
|
|
||||||
void usb_bulk_block_cb(void* user_data, unsigned int bytes_transferred) {
|
void usb_bulk_block_cb(void* user_data, unsigned int bytes_transferred) {
|
||||||
usb_bulk_block_send = true;
|
usb_bulk_block_done = true;
|
||||||
|
|
||||||
(void)user_data;
|
(void)user_data;
|
||||||
(void)bytes_transferred;
|
(void)bytes_transferred;
|
||||||
}
|
}
|
||||||
|
|
||||||
void usb_send_bulk(void* const data, const uint32_t maximum_length) {
|
void usb_send_bulk(void* const data, const uint32_t maximum_length) {
|
||||||
usb_bulk_block_send = false;
|
usb_bulk_block_done = false;
|
||||||
|
|
||||||
usb_transfer_schedule_block(
|
usb_transfer_schedule_block(
|
||||||
&usb_endpoint_bulk_in,
|
&usb_endpoint_bulk_in,
|
||||||
@ -25,7 +25,20 @@ void usb_send_bulk(void* const data, const uint32_t maximum_length) {
|
|||||||
usb_bulk_block_cb,
|
usb_bulk_block_cb,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
while (!usb_bulk_block_send);
|
while (!usb_bulk_block_done);
|
||||||
|
}
|
||||||
|
|
||||||
|
void usb_receive_bulk(void* const data, const uint32_t maximum_length) {
|
||||||
|
usb_bulk_block_done = false;
|
||||||
|
|
||||||
|
usb_transfer_schedule_block(
|
||||||
|
&usb_endpoint_bulk_out,
|
||||||
|
data,
|
||||||
|
maximum_length,
|
||||||
|
usb_bulk_block_cb,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
while (!usb_bulk_block_done);
|
||||||
}
|
}
|
||||||
|
|
||||||
void usb_send_csw(msd_cbw_t *msd_cbw_data, uint8_t status) {
|
void usb_send_csw(msd_cbw_t *msd_cbw_data, uint8_t status) {
|
||||||
@ -135,7 +148,7 @@ uint8_t request_sense(msd_cbw_t *msd_cbw_data) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t mode_sense6 (msd_cbw_t *msd_cbw_data) {
|
uint8_t mode_sense6(msd_cbw_t *msd_cbw_data) {
|
||||||
(void)msd_cbw_data;
|
(void)msd_cbw_data;
|
||||||
|
|
||||||
scsi_mode_sense6_response_t ret = {
|
scsi_mode_sense6_response_t ret = {
|
||||||
@ -178,31 +191,12 @@ uint8_t data_read10(msd_cbw_t *msd_cbw_data) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
volatile uint32_t write10_blocks_send = 0;
|
|
||||||
void write10_cb(void* user_data, unsigned int bytes_transferred)
|
|
||||||
{
|
|
||||||
write10_blocks_send++;
|
|
||||||
|
|
||||||
(void)user_data;
|
|
||||||
(void)bytes_transferred;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t data_write10(msd_cbw_t *msd_cbw_data) {
|
uint8_t data_write10(msd_cbw_t *msd_cbw_data) {
|
||||||
write10_blocks_send = 0;
|
|
||||||
|
|
||||||
data_request_t req = decode_data_request(msd_cbw_data->cmd_data);
|
data_request_t req = decode_data_request(msd_cbw_data->cmd_data);
|
||||||
|
|
||||||
for (size_t block_index = 0; block_index < req.blk_cnt; block_index++) {
|
for (size_t block_index = 0; block_index < req.blk_cnt; block_index++) {
|
||||||
usb_transfer_schedule_block(
|
usb_receive_bulk(&usb_bulk_buffer[0], 512);
|
||||||
&usb_endpoint_bulk_out,
|
write_block(req.first_lba + block_index, &usb_bulk_buffer[0], 1 /* n blocks */);
|
||||||
&usb_bulk_buffer[0],
|
|
||||||
512,
|
|
||||||
write10_cb,
|
|
||||||
msd_cbw_data);
|
|
||||||
|
|
||||||
while (write10_blocks_send <= block_index);
|
|
||||||
|
|
||||||
//TODO: write to SD
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user