/* PICCOLO project
 * Copyright (c) 2009-2010 Istvan Cserny (cserny@atomki.hu)
 *
 */

#include "piccolo_all.h"

/** \file
Mintaprogram, az USB kapcsolat interaktív használatának bemutatására.
A program egy egyszerű parancsértelmezőt tartalmaz, amely a virtuális
soros portról kapott egybetűs parancsokat értelmezi és végrehajtja.

Minden parancsot a #-jellel kezdjük, s a parancs betűjelével folytatjuk.
A D parancsot egy kétjegyű hexadecimális számnak kell követnie.
Az értelmezett parancsok:
 - #A - analóg jel mérése (a potméter állása)
 - #B - nyomógomb állapotának lekérdezése
 - #Dnn - LEDport beállítása
 - #H - help kiirása
 - #L - LED villogtatás tiltás/engedélyezés
 - #V - verzió és CPU azonosító kiíratása

Ha a program lefordítása előtt az USE_USB és az USE_INTERRUPT szimbólumokat
is definiáljuk, akkor az USB kapcsolat kiszolgálása interrupt szinten
történik. Ha csak az USE_USB szimbólumot definiáljuk, akkor pedig lekérdezéses
üzemmódban történik a kezelés,ugyanúgy, mint a hello-poll.c programnál.

Hardver igény:
   - PICCOLO projekt alapkapcsolás PIC18F14K50 vagy PIC18F4550 mikrovezérlővel,
     esetleg a Microchip Low Pin Count USB vagy a PICDEM Full Speed USB demókártya
   - USB kapcsolat
*/


/*** VÁLTOZÓK ********************************************************/
unsigned int adat;
char uc,uv;
char led[8];
int ix;

/*** INTERRUPT KISZOLGÁLÓ ELJÁRÁSOK **********************************/
#if defined(USE_INTERRUPT)
	///Magas prioritású programmegszakítás kiszolgálása
	#pragma interrupt hi_isr
	void hi_isr() {
	#if defined(USB_INTERRUPT)
	    USBDeviceTasks(); //--- USB programmegszakítás kiszolgálása
	#endif  //USB_INTERRUPT
	}
	///Alacsony prioritású programmegszakítás kiszolgálása
	#pragma interruptlow lo_isr
	void lo_isr() {
			
	}
#endif //USE_INTERRUPT

/*********************************************************************
 *    FŐPROGRAM:  USB CDC demo                                       *
 *********************************************************************/
void main(void) {
    InitializeSystem();
mInitSwitch1()
//-- Megvárjuk az első karakter érkezését
    while (!usb_cdc_kbhit()) {
        ProcessIO();
    }
    outString("Isten hozott a PICCOLO projekthez!\n");
    outString("cdc-demo.c program (USB CDC demo)\n");
    while (1) {
//--- Új parancsra várunk. A parancs #-jellel kezdődik
        do {
            uv=usb_cdc_getc();

			if (SW1 == 0) {
				mLED_1=1;
			}
			if (SW1 == 1) {
				mLED_1=0;
			}



        } while (uv!='#');
        for (ix = 0; ix<=7; ix++)
        {
            uc=usb_cdc_getc();
            led[ix] = uc;
            usb_cdc_putc(uc);
            usb_cdc_putc(';');
            usb_cdc_putc(led[ix]);
            usb_cdc_putc(0x0D);             //Kocsi vissza (CR)
            usb_cdc_putc(0x0A);             //Soremelés (LF)
        }
        mLED_1 = led[0];
        mLED_2 = led[1];
        mLED_3 = led[2];
        mLED_4 = led[3];
        mLED_5 = led[4];
        mLED_6 = led[5];
        mLED_7 = led[6];
        mLED_8 = led[7];




        usb_cdc_putc(0x0D);             //Kocsi vissza (CR)
        usb_cdc_putc(0x0A);             //Soremelés (LF)

			if (SW1 == 0) {
				mLED_1=1;
			}
			if (SW1 == 1) {
				mLED_1=0;
			}
    } //while
}     //main
/******** Főprogram vége *********************************************/
