示例#1
0
文件: scanf.c 项目: gmoccapy/stmbl
int scanf_(const char *format, ...){
	int ret = 0;
	char rx_buf[APP_TX_BUF_SIZE];
	va_list arg;
	if(UB_USB_CDC_GetStatus()==USB_CDC_CONNECTED){
		if(UB_USB_CDC_ReceiveString(rx_buf)==RX_READY){
			va_start(arg, format);
			ret = vfsscanf_(rx_buf, format, arg);
			va_end(arg);
		}else{
			ret = -1;
		}
	}
	return(ret);
}
int main(void)
{
	RTC_STATUS_t check;
	uint8_t old_sek=0;

	char buf[APP_TX_BUF_SIZE]; // puffer fuer Datenempfang

	SystemInit(); // Quarz Einstellungen aktivieren

	// Init der LEDs
	UB_Led_Init();

	// Init der Buttons
	UB_Button_Init ( );

	// Init und start der RTC
	check=UB_RTC_Init();

	if(check==RTC_UNDEFINED) {
		// RTC war noch nie initialisiert
		UB_Led_On(LED_RED);
	}
	else {
		// RTC war schon initialisiert
		UB_Led_On(LED_GREEN);
	}

	// Init vom USB-OTG-Port als CDC-Device
	// (Virtueller-ComPort)

	/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	 *  die nächste Zeile auskommentieren,
	 *  dann funktioniert das Zurücksetzen
	 *  des RTC
	 */
	UB_USB_CDC_Init();

	while ( 1 )
	{
		// wenn Button gedrückt -> RTC zurücksetzen
		if ( UB_Button_Read ( BTN_USER ) )
		{
			// orange LED ein
			UB_Led_On ( LED_ORANGE );
			// RTC zurücksetzen
			ResetRTC ( );
			// warten bis Button gelöst
			while ( UB_Button_Read ( BTN_USER ) );
			// die LED noch ein Weilchen an lassen
			Delay ( 10000000 );
			UB_Led_Off ( LED_ORANGE );
		}
		// aktuelle RTC-Zeit auslesen
		UB_RTC_GetClock(RTC_DEC);
		if(UB_RTC.sek!=old_sek) {
			// wenn eine Sekunde um ist
			old_sek=UB_RTC.sek;
			UB_Led_Toggle(LED_BLUE);

			// aktuelle Zeit als String formatieren
			sprintf ( buf, "%02d.%02d.%02d %02d:%02d:%02d",
					UB_RTC.tag, UB_RTC.monat, UB_RTC.jahr,
					UB_RTC.std, UB_RTC.min, UB_RTC.sek );
			// an Semihosting senden
			printf ( "%s\r\n", buf );

			// Test ob USB-Verbindung zum PC besteht
			if(UB_USB_CDC_GetStatus()==USB_CDC_CONNECTED)
			{
				// an PC senden
				UB_USB_CDC_SendString ( buf, LFCR );
			}
		}
	}
}