

/** V A R I A B L E S ********************************************************/


unsigned int resistance_A_value = 0;
unsigned int resistance_B_value = 0;
unsigned int resistance_C_value = 0;
unsigned int resistance_D_value = 0;
unsigned int slider_value = 0;
unsigned int light_value = 0;
unsigned int sound_value = 0;
unsigned int button_value = 0;
 


/** DECLARATIONS ***************************************************/
#pragma code

/******************************************************************************
 * Function:        void main(void)
 *
 * PreCondition:    None
 *
 * Input:           None
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        Main program entry point.
 *
 * Note:            None
 *****************************************************************************/
void main(void)
{   
    InitializeSystem();

    while(1)
    {
        //USBڑBڑ̂traɊւzXgv͊荞݂őΉ
            if(USB_BUS_SENSE && (USBGetDeviceState() == DETACHED_STATE))
            {
                USBDeviceAttach();
            }

		//[U[vZX
        ProcessIO();        
    }//end while
}//end main



/********************************************************************
 * Function:        void UserInit(void)
 *
 * Overview:        ݒ
 *
 *******************************************************************/
void UserInit(void)
{
//	chԍ̐ݒ---------------------------------------------------
	
	#define RA 4
	#define RB 2	
	#define RC 1		
	#define RD 0
	#define SLIDER 7
	#define LIGHT 5
	#define SOUND 6
	#define BUTTON 3
	
//	|[gݒ---------------------------------------------------	
 	TRISA = 0b11111111;              // |[gA (RA3͓͐p)				    
//			  ||||||||__________________
//			  |||||||___________________
//			  ||||||____________________
//			  |||||_____________________
//			  ||||______________________RA4/AN3/OSC
//			  |||_______________________RA5/   /OSC    
//			  ||________________________
//			  |_________________________

	TRISB = 0b01111111;				 // |[gB 
//			  ||||||||__________________
//			  |||||||___________________
//			  ||||||____________________
//			  |||||_____________________
//			  ||||______________________RB4/AN10..SOUND
//			  |||_______________________RB5/AN11..BUTTON
//			  ||________________________RB6
//			  |_________________________RB7.......LED
	
 	TRISC = 0b11111111; 	          // |[gC
//			  ||||||||__________________RC0/AN4..SLIDER
//			  |||||||___________________RC1/AN5..RA
//			  ||||||____________________RC2/AN6..RB
//			  |||||_____________________RC3/AN7..RC
//			  ||||______________________RC4    
//			  |||_______________________RC5    
//			  ||________________________RC6/AN8..RD
//			  |_________________________RC7/AN9..LIGHT




//	ADϊݒ-----------------------------------------------------
	ADCON0 = 0b00000001;		    	 
//					@ |_________________AD On

	ADCON1 = 0b00000000;               	
//	       		   | |__________________dt@Xݒ Vref+ Vdd
//				   |____________________dt@Xݒ Vref-  Vss

	ADCON2 = 0b10101110;		      	
//			   | |  |___________________ADϊNbNݒ@Fosc/64
//			   | |______________________ADANCVWԁ@12Tad
//			   |________________________ϊʉEl


//	LEDݒ---------------------------------------------------	
	#define LED_H()				{LATBbits.LATB7=0;}
	#define LED_L()				{LATBbits.LATB7=1;}


//	NLED_---------------------------------------------------
   	
 	LED_H();
	delay_ms(200);
	LED_L();
	delay_ms(200);
	LED_H();
	delay_ms(200);
	LED_L(); 
	
	
}//end UserInit


/********************************************************************
 * Function:        void ProcessIO(void)
 *
 * Overview:        [U[vZX
 *
 *******************************************************************/
void ProcessIO(void)
{   
    BYTE numBytesRead;
    
    ADCON();	//v
        
    // USBʐMIĂ邱ƂmF   
    if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return;
    
    if(mUSBUSARTIsTxTrfReady())
    {
		numBytesRead = getsUSBUSART(USB_Out_Buffer,64);
		if(numBytesRead != 0)
		{
			LED_H();											//LED_
			if(USB_Out_Buffer[0] > 0)
			{
					buildScratchPacket(15,4);			//擪f[^ 11111000	
					
					buildScratchPacket(RA,resistance_A_value);	//RA    10100***
					
					buildScratchPacket(RB,resistance_B_value);	//RB    10010***

					buildScratchPacket(RC,resistance_C_value);	//RC    10001***							
											
					buildScratchPacket(RD,resistance_D_value);	//RD    10000***					

					buildScratchPacket(SLIDER,slider_value);	//XC_[  10111***
						
					buildScratchPacket(LIGHT,light_value);		//邳    10101***

					buildScratchPacket(SOUND,sound_value);		//     10110***

					buildScratchPacket(BUTTON,button_value);	//{^     10011***	
			}
			LED_L();											//LED
		}
	}	
    CDCTxService();		//MƑM̊mF
    
    
}//end ProcessIO

/********************************************************************
 * Function:        void ADCON(void)
 *
 * Overview:        ADRo[^[
 *
 * chanel			AN5		RA
 *					AN6		RB
 *					AN7		RC
 *					AN8		RD
 *					AN9		SLIDER
 *					AN10	LIGHT
 *					AN11	SOUND 
 *******************************************************************/
 void ADCON()
{
 		//RAv
    	SetChanADC(ADC_CH5);
	    ConvertADC();
    	while(BusyADC());
    	resistance_A_value = ReadADC();
    	
 		//RBv
    	SetChanADC(ADC_CH6);
	    ConvertADC();
    	while(BusyADC());
    	resistance_B_value = ReadADC();
    	
  		//RCv
    	SetChanADC(ADC_CH7);
	    ConvertADC();
    	while(BusyADC());
    	resistance_C_value = ReadADC();
    	
   		//RDv
    	SetChanADC(ADC_CH8);
	    ConvertADC();
    	while(BusyADC());
    	resistance_D_value = ReadADC();
  
  		//SLIDERv@@
    	SetChanADC(ADC_CH4);
	    ConvertADC();
    	while(BusyADC());
    	slider_value = ReadADC();
    	
 		//LIGHTv
    	SetChanADC(ADC_CH9);
	    ConvertADC();
    	while(BusyADC());
    	light_value = ReadADC();
    	    	
  		//SOUNDv
    	SetChanADC(ADC_CH10);
	    ConvertADC();
    	while(BusyADC());
    	sound_value = ReadADC();
    	 
		//BUTTONv
    	SetChanADC(ADC_CH11);
	    ConvertADC();
    	while(BusyADC());
    	button_value = ReadADC();
 }
 
/********************************************************************
 * Function:        void buildScratchPacket(int ch,int value)
 *
 * Overview:        XNb`ɕԐMpacket@Data쐬
 *					traM`FbNčƂ
 *******************************************************************/
void buildScratchPacket(int ch,unsigned int value)
{
	unsigned char fbuf[1];
	unsigned char sbuf[1];
	
	while(1)
		{
		 CDCTxService();				//MƑM̊mF 	 	
		 if(mUSBUSARTIsTxTrfReady()) 	//CDCTxServicẽtOǂŔ肷}NB
		 						//Of[^̑M󂯎瑗MJnB
		 {	
			char firstPacket= 0x01<<7|ch<<3|((value & (unsigned int )0x380))>>7;
			char secondPacket = value&0x7f;
			fbuf[0] = firstPacket;
			sbuf[0] = secondPacket;
			
			SerialPrintByte(fbuf,1);
			delay_10us(40);
			SerialPrintByte(sbuf,1);
			delay_10us(40);
			break;
			}
		}	
}

