Esempio n. 1
0
bool Menu_Delete(){

	WPAD_Rumble(0,0);
	self.rumbleAmt = 0;
	
	struct discHdr *header = NULL;
 	char gameName[31]; 
	
	/* No game list */
	if (!self.gameCnt)
		return false;

	/* Selected game */
	header = &self.gameList[self.gameSelected];
	char title[MAX_TITLE_LEN];

	if(self.usingTitlesTxt){
		sprintf(title, "%s", header->title);
		getTitle(titleList, (char*)header->id, title);
	}
	else
		sprintf(title, "%s", (header->title));

	if(strlen(title) < 30) {
		sprintf(gameName, "%s", title);
	}
	else
	{
		strncpy(gameName, title, 27);
		gameName[27] = '\0';
		strncat(gameName, "...", 3);
	}

	//if(WindowPrompt(TX.askDelete, gameName, &yesButton, &noButton))
	if(WindowPromptInstall((char*)header->id, gameName, TX.askDelete, &yesButton, &noButton, 1))
	{
		BUFFER_KillBuffer();
		if(0 > WBFS_RemoveGame(header->id))
		{
			InitializeBuffer(self.gameList,self.gameCnt,BUFFER_WINDOW,COVER_COUNT/2.0 +self.shift,(settings.covers3d+settings.hq));
			BUFFER_InitBuffer();
			WindowPrompt(TX.errorDelete, TX.cantDelete, &okButton, 0);
		}
		else
		{
			GetEntries();
			InitializeBuffer(self.gameList,self.gameCnt,BUFFER_WINDOW,COVER_COUNT/2.0 +self.shift,(settings.covers3d+settings.hq));
			BUFFER_InitBuffer();
			WindowPrompt(TX.successDelete, TX.pressOkContinue, &okButton, 0);
			WBFS_DiskSpace(&self.usedSpace, &self.freeSpace);
			return true;
		}
	}
	
	return false;
}
Esempio n. 2
0
File: uart.c Progetto: r3nk/AVR3nk
/*!
*******************************************************************************
** \brief   Initializes the USART hardware as a UART interface.
**
** \param   id          UART identifier. UART 0 is the first UART interface.
** \param   baudRate    Baud rate setting, indicates the speed in bps.
** \param   parityMode  Indicates whether a parity bit will be transmitted
**                      (transceiver) and expected (receiver). It can be
**                      switched off, odd or even.
** \param   stopBitMode Indicates whether one or two stop bits will be sent
**                      when transmitting data.
** \param   charSizeMode
**                      Indicates the number of bits per transmission.
** \param   transceiveMode
**                      Indicates whether the receiver, the transmitter or
**                      both will be enabled.
** \param   ledParamsPtr
**                      Optional pointer. Specifies setup for activity LEDs.
**
** \return
**          - A valid UART_HandleT handle on success.
**          - NULL if a bad parameter has been passed.
**
*******************************************************************************
*/
UART_HandleT UART_Init (UART_InterfaceIdT id,
                        UART_BaudT        baudRate,
                        UART_ParityT      parityMode,
                        UART_StopBitT     stopBitMode,
                        UART_CharSizeT    charSizeMode,
                        UART_TransceiveT  transceiveMode,
                        UART_LedParamsT*  ledParamsPtr)
{
    uartHandleT* handlePtr = NULL;
    uint8_t sreg_save = 0;
    uint8_t ucsra     = 0;
    uint8_t ucsrb     = 0;
    uint8_t ucsrc     = 0;

    // no need to store these in the handle:
    volatile uint8_t* ucsrc_ptr;
    volatile uint8_t* ubrrh_ptr;
    volatile uint8_t* ubrrl_ptr;

    // Get the handle for the identified port:
    if ((id) < (sizeof(uartHandleArr) / sizeof(uartHandleArr[0])))
    {
        handlePtr = &uartHandleArr[id];
    }
    else
    {
        return (NULL);
    }

    // Reset handle:
    memset(handlePtr, 0, sizeof(uartHandleT));

    // Initialize register addresses for specified port:
#if (UART_PORT_FACTOR == UART_SINGLEPORT)
    handlePtr->udrPtr   = &UDR;
    handlePtr->ucsraPtr = &UCSRA;
    handlePtr->ucsrbPtr = &UCSRB;
    ucsrc_ptr            = &UCSRC;
    ubrrh_ptr            = &UBRRH;
    ubrrl_ptr            = &UBRRL;
#endif

#if (UART_PORT_FACTOR == UART_MULTIPORT_1)
    handlePtr->udrPtr   = &UDR0;
    handlePtr->ucsraPtr = &UCSR0A;
    handlePtr->ucsrbPtr = &UCSR0B;
    ucsrc_ptr            = &UCSR0C;
    ubrrh_ptr            = &UBRR0H;
    ubrrl_ptr            = &UBRR0L;
#endif

#if (UART_PORT_FACTOR == UART_MULTIPORT_2)
    if(id == UART_InterfaceId0)
    {
        handlePtr->udrPtr   = &UDR0;
        handlePtr->ucsraPtr = &UCSR0A;
        handlePtr->ucsrbPtr = &UCSR0B;
        ucsrc_ptr            = &UCSR0C;
        ubrrh_ptr            = &UBRR0H;
        ubrrl_ptr            = &UBRR0L;
    }
    if(id == UART_InterfaceId1)
    {
        handlePtr->udrPtr   = &UDR1;
        handlePtr->ucsraPtr = &UCSR1A;
        handlePtr->ucsrbPtr = &UCSR1B;
        ucsrc_ptr            = &UCSR1C;
        ubrrh_ptr            = &UBRR1H;
        ubrrl_ptr            = &UBRR1L;
    }
#endif

    // Disable interrupts temporarily:
    sreg_save = SREG;
    cli();

    /* normal transmission speed, no MPCM */
    *handlePtr->ucsraPtr = 0x00;

    // init UCSRB and UCSRC with 0 first:
    *handlePtr->ucsrbPtr = 0x00;
#if (UART_PORT_FACTOR == UART_SINGLEPORT)
    // select UCSRC register and clear
    *ucsrc_ptr = (1 << URSEL);
#else
    // clear UCSRC, also: UMSEL0 1:0 = b00 => asynchronous UART
    *ucsrc_ptr = 0x00;
#endif

    // set up the register configuration:
    uartSetBaudRate(ubrrh_ptr, ubrrl_ptr, baudRate);

    // parity setup
    switch (parityMode)
    {
        case UART_Parity_off:    // UPM1:0 = 00
            break;
        case UART_Parity_odd:    // UPM1:0 = 11
            ucsrc |= (1 << UPM1) | (1 << UPM0);
            break;
        case UART_Parity_even:   // UPM1:0 = 10
            ucsrc |= (1 << UPM1);
            break;
        default:
            SREG = sreg_save;
            return (NULL);
    }

    // stop bit setup
    switch (stopBitMode)
    {
        case UART_StopBit_1: // USBS = 0
            break;
        case UART_StopBit_2: // USBS = 1
            ucsrc |= (1 << USBS);
            break;
        default:
            SREG = sreg_save;
            return (NULL);
    }

    // character size setup

    // avoid 9-bit setting: UCSZ2 in ucsrb is already cleared.
    // UCSZ1:0 settings:
    switch (charSizeMode)
    {
        case UART_CharSize_5:    // UCSZ1:0 = 00
            break;
        case UART_CharSize_6:    // UCSZ1:0 = 01
            ucsrc |= (1 << UCSZ0);
            break;
        case UART_CharSize_7:    // UCSZ1:0 = 10
            ucsrc |= (1 << UCSZ1);
            break;
        case UART_CharSize_8:    // UCSZ1:0 = 11
            ucsrc |= ((1 << UCSZ1) | (1 << UCSZ0));
            break;
        default:
            SREG = sreg_save;
            return (NULL);
    }

    // receiver/transmitter setup
    switch (transceiveMode)
    {
        case UART_Transceive_Rx:
            // also enable receive interrupt:
            ucsrb |= (1 << RXCIE) | (1 << RXEN);
            break;
        case UART_Transceive_Tx:
            // transmit interrupt will be enabled automatically when sending
            ucsrb |= (1 << TXEN);
            break;
        case UART_Transceive_RxTx:
            // also enable receive interrupt:
            ucsrb |= (1 << RXCIE) | (1 << RXEN) | (1 << TXEN);
            break;
        default:
            SREG = sreg_save;
            return (NULL);
    }

    // apply configuration register settings
    *handlePtr->ucsraPtr = ucsra;
    *handlePtr->ucsrbPtr = ucsrb;

#if (UART_PORT_FACTOR == UART_SINGLEPORT)
    *ucsrc_ptr = (1 << URSEL) | ucsrc;
#else
    *ucsrc_ptr = ucsrc;
#endif

    // initialize the buffers:
    // realize as static arrays to avoid allocation from heap:
    BUFFER_InitBuffer(&handlePtr->rxBuffer,
                      handlePtr->rxBufferArray,
                      UART_BUFFER_LENGTH_RX);
    BUFFER_InitBuffer(&handlePtr->txBuffer,
                      handlePtr->txBufferArray,
                      UART_BUFFER_LENGTH_TX);

    // set up LEDs:
    if (ledParamsPtr)
    {
        if (ledParamsPtr->txLedPortPtr && ledParamsPtr->txLedDdrPtr)
        {
            handlePtr->txLedPortPtr = ledParamsPtr->txLedPortPtr;
            handlePtr->txLedIdx     = ledParamsPtr->txLedIdx;
            handlePtr->txLedActive  = 1;
            UART_TX_LED_OFF;
            // finally set pin as output:
            *ledParamsPtr->txLedDdrPtr |= (1 << ledParamsPtr->txLedIdx);
        }
        if (ledParamsPtr->rxLedPortPtr && ledParamsPtr->rxLedDdrPtr)
        {
            handlePtr->rxLedPortPtr = ledParamsPtr->rxLedPortPtr;
            handlePtr->rxLedIdx     = ledParamsPtr->rxLedIdx;
            handlePtr->rxLedActive  = 1;
            UART_RX_LED_OFF;
            // finally set pin as output:
            *ledParamsPtr->rxLedDdrPtr |= (1 << ledParamsPtr->rxLedIdx);
        }
    }

    // initialize local variables:
#if UART_RX_CALLBACK_COUNT
    memset(handlePtr->rxCallbackArray, 0,
           UART_RX_CALLBACK_COUNT * sizeof(uartRxCallbackT));
#endif
    handlePtr->rxWaiting = 0;
    handlePtr->initialized = 1;

    // restore SREG:
    SREG = sreg_save;

    return ((UART_HandleT)handlePtr);
}