Esempio n. 1
0
/**
 * This function returns the connection status of the USB HID interface
 * \return 1: interface available
 * \return 0: interface not available
 * \note Applications shouldn't call this function directly, instead please use \ref PIOS_COM layer functions
 */
bool PIOS_USB_CheckAvailable(uint32_t id)
{
	struct pios_usb_dev * usb_dev = (struct pios_usb_dev *) pios_usb_com_id;

	if (PIOS_USB_validate(usb_dev) != 0)
		return false;

	return PIOS_USB_CableConnected(id) && transfer_possible;
}
Esempio n. 2
0
int main()
{
    PIOS_SYS_Init();
    PIOS_Board_Init();
    PIOS_IAP_Init();

    USB_connected = PIOS_USB_CableConnected(0);

    if (PIOS_IAP_CheckRequest() == TRUE) {
        PIOS_DELAY_WaitmS(1000);
        User_DFU_request = TRUE;
        PIOS_IAP_ClearRequest();
    }

    GO_dfu = (USB_connected == TRUE) || (User_DFU_request == TRUE);

    if (GO_dfu == TRUE) {
        PIOS_Board_Init();
        if (User_DFU_request == TRUE) {
            DeviceState = DFUidle;
        } else {
            DeviceState = BLidle;
        }
    } else {
        JumpToApp = TRUE;
    }

    uint32_t stopwatch  = 0;
    uint32_t prev_ticks = PIOS_DELAY_GetuS();
    while (TRUE) {
        /* Update the stopwatch */
        uint32_t elapsed_ticks = PIOS_DELAY_GetuSSince(prev_ticks);
        prev_ticks += elapsed_ticks;
        stopwatch  += elapsed_ticks;

        if (JumpToApp == TRUE) {
            jump_to_app();
        }

        switch (DeviceState) {
        case Last_operation_Success:
        case uploadingStarting:
        case DFUidle:
            period1 = 5000;
            sweep_steps1 = 100;
            PIOS_LED_Off(PIOS_LED_ALARM);
            period2 = 0;
            break;
        case uploading:
            period1 = 5000;
            sweep_steps1 = 100;
            period2 = 2500;
            sweep_steps2 = 50;
            break;
        case downloading:
            period1 = 2500;
            sweep_steps1 = 50;
            PIOS_LED_Off(PIOS_LED_ALARM);
            period2 = 0;
            break;
        case BLidle:
            period1 = 0;
            PIOS_LED_On(PIOS_LED_HEARTBEAT);
            period2 = 0;
            break;
        default: // error
            period1 = 5000;
            sweep_steps1 = 100;
            period2 = 5000;
            sweep_steps2 = 100;
        }

        if (period1 != 0) {
            if (LedPWM(period1, sweep_steps1, stopwatch)) {
                PIOS_LED_On(PIOS_LED_HEARTBEAT);
            } else {
                PIOS_LED_Off(PIOS_LED_HEARTBEAT);
            }
        } else {
            PIOS_LED_On(PIOS_LED_HEARTBEAT);
        }

        if (period2 != 0) {
            if (LedPWM(period2, sweep_steps2, stopwatch)) {
                PIOS_LED_On(PIOS_LED_ALARM);
            } else {
                PIOS_LED_Off(PIOS_LED_ALARM);
            }
        } else {
            PIOS_LED_Off(PIOS_LED_ALARM);
        }

        if (stopwatch > 50 * 1000 * 1000) {
            stopwatch = 0;
        }
        if ((stopwatch > 6 * 1000 * 1000) && (DeviceState
                                              == BLidle)) {
            JumpToApp = TRUE;
        }

        processRX();
        DataDownload(start);
    }
}