@@ -65,9 +65,6 @@ static struct {
6565 /** HAL Transfer status */
6666 volatile spi_status_t spi_status ;
6767
68- // Used to sequence startup with ADC.
69- int init_done ;
70-
7168 // This is used when SPI only needs to receive. It should always stay as 0.
7269 uint8_t tx_dummy_byte ;
7370 // This is used when received data is to be discarded. Its value should be ignored.
@@ -536,7 +533,6 @@ pbio_error_t pbdrv_block_device_read(pbio_os_state_t *state, uint32_t offset, ui
536533
537534 // Set address for this read request and send it.
538535 set_address_be (& read_address [1 ], PBDRV_CONFIG_BLOCK_DEVICE_EV3_START_ADDRESS + offset + size_done );
539- PBIO_OS_AWAIT_WHILE (state , bdev .spi_status & SPI_STATUS_WAIT_ANY );
540536 err = spi_begin_for_flash (read_address , sizeof (read_address ), 0 , buffer + size_done , size_now );
541537 if (err != PBIO_SUCCESS ) {
542538 return err ;
@@ -557,7 +553,6 @@ static pbio_error_t flash_wait_write(pbio_os_state_t *state) {
557553 PBIO_OS_ASYNC_BEGIN (state );
558554
559555 do {
560- PBIO_OS_AWAIT_WHILE (state , bdev .spi_status & SPI_STATUS_WAIT_ANY );
561556 err = spi_begin_for_flash (cmd_status , sizeof (cmd_status ), 0 , 0 , 0 );
562557 if (err != PBIO_SUCCESS ) {
563558 return err ;
@@ -585,10 +580,16 @@ pbio_error_t pbdrv_block_device_store(pbio_os_state_t *state, uint8_t *buffer, u
585580 return PBIO_ERROR_INVALID_ARG ;
586581 }
587582
583+ #if PBDRV_CONFIG_ADC_EV3
584+ // HACK
585+ // We only store on shutdown. Block ADC.
586+ pbdrv_adc_ev3_shut_down_hack ();
587+ PBIO_OS_AWAIT_UNTIL (state , pbdrv_adc_ev3_is_shut_down_hack ());
588+ #endif
589+
588590 // Erase sector by sector.
589591 for (offset = 0 ; offset < size ; offset += FLASH_SIZE_ERASE ) {
590592 // Enable writing
591- PBIO_OS_AWAIT_WHILE (state , bdev .spi_status & SPI_STATUS_WAIT_ANY );
592593 err = spi_begin_for_flash (cmd_write_enable , sizeof (cmd_write_enable ), 0 , 0 , 0 );
593594 if (err != PBIO_SUCCESS ) {
594595 return err ;
@@ -597,7 +598,6 @@ pbio_error_t pbdrv_block_device_store(pbio_os_state_t *state, uint8_t *buffer, u
597598
598599 // Erase this block
599600 set_address_be (& erase_address [1 ], PBDRV_CONFIG_BLOCK_DEVICE_EV3_START_ADDRESS + offset );
600- PBIO_OS_AWAIT_WHILE (state , bdev .spi_status & SPI_STATUS_WAIT_ANY );
601601 err = spi_begin_for_flash (erase_address , sizeof (erase_address ), 0 , 0 , 0 );
602602 if (err != PBIO_SUCCESS ) {
603603 return err ;
@@ -616,7 +616,6 @@ pbio_error_t pbdrv_block_device_store(pbio_os_state_t *state, uint8_t *buffer, u
616616 size_now = pbio_int_math_min (size - size_done , FLASH_SIZE_WRITE );
617617
618618 // Enable writing
619- PBIO_OS_AWAIT_WHILE (state , bdev .spi_status & SPI_STATUS_WAIT_ANY );
620619 err = spi_begin_for_flash (cmd_write_enable , sizeof (cmd_write_enable ), 0 , 0 , 0 );
621620 if (err != PBIO_SUCCESS ) {
622621 return err ;
@@ -625,7 +624,6 @@ pbio_error_t pbdrv_block_device_store(pbio_os_state_t *state, uint8_t *buffer, u
625624
626625 // Write this block
627626 set_address_be (& write_address [1 ], PBDRV_CONFIG_BLOCK_DEVICE_EV3_START_ADDRESS + size_done );
628- PBIO_OS_AWAIT_WHILE (state , bdev .spi_status & SPI_STATUS_WAIT_ANY );
629627 err = spi_begin_for_flash (write_address , sizeof (write_address ), buffer + size_done , 0 , size_now );
630628 if (err != PBIO_SUCCESS ) {
631629 return err ;
@@ -663,8 +661,6 @@ pbio_error_t pbdrv_block_device_ev3_init_process_thread(pbio_os_state_t *state,
663661
664662 // Initialization done.
665663 pbdrv_init_busy_down ();
666- bdev .init_done = 1 ;
667- pbio_os_request_poll ();
668664
669665 PBIO_OS_ASYNC_END (PBIO_SUCCESS );
670666}
@@ -720,11 +716,6 @@ void pbdrv_block_device_init(void) {
720716 pbio_os_process_start (& pbdrv_block_device_ev3_init_process , pbdrv_block_device_ev3_init_process_thread , NULL );
721717}
722718
723- // ADC glue functions
724- int pbdrv_block_device_ev3_init_is_done () {
725- return bdev .init_done ;
726- }
727-
728719int pbdrv_block_device_ev3_is_busy () {
729720 return bdev .spi_status & SPI_STATUS_WAIT_ANY ;
730721}
0 commit comments