//Tomáš Vičar
//17.3.2014
//firmwre pro EDA modul

#include <ex_usb_common.h>  //nastavení pic18f2550 (součást kompilátoru)
#define USB_CONFIG_HID_TX_SIZE   3 //nastavení velikosti odesílaného USB packetu
#define USB_CONFIG_HID_RX_SIZE   1 //nastavení velikosti přijímaného USB packetu
#include <pic18_usb.h>   //ovladače USB (součást kompilátoru)
#include <usb_desc_hid.h>   //ovladače usb pro HID komunikaci (součást kompilátoru)
#include <usb.c>        //ovladače USB (součást kompilátoru)
#use spi(MASTER, DI=PIN_A3, DO=PIN_A2, CLK=PIN_A0, BITS=12, MSB_FIRST)   //nastavení SPI (pinů) pro komunikaci s A/D
#define CS      pin_A1    //nastavení pinu řídícího A/D převodník
   int8 out_data[USB_CONFIG_HID_TX_SIZE];//nastavení datových polí na velikost usb packetů
   int8 in_data[USB_CONFIG_HID_RX_SIZE];
   unsigned char high = 0;  //proměnná pro příjem horního bytu
   unsigned char low = 0;  //proměnná pro příjem dolního bytu  
//main
void main(void)
{

   HW_INIT();//iniciace   
   usb_init_cs();//iniciace usb

   while (TRUE)//nekonečná smyčka
   {
   memset(out_data, 0x00, USB_CONFIG_HID_TX_SIZE);
   memset(in_data, 0x00, USB_CONFIG_HID_RX_SIZE);
      usb_task();//pokus o spojení s USB
      if (usb_enumerated()) //pokud usb odpovídá
      {
            output_low(CS); //zapnutí A/D
            spi_xfer(0x01);                //poslaní 1 do a/d  -- žádost o data
            high = spi_xfer(0x80); //příjem horního bytu
            low = spi_xfer(0x00); //příjem dolníhy bytu
            output_high(CS); //vypnutí a/d
            out_data[0]=high; //horní byte do USB proměné
            out_data[1]=low;  //dolní byte do USB proměné
            usb_put_packet(1, out_data, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE); //odeslaní dat do USB
       }
       if (usb_kbhit(1)) //příjem dat USB (nevyužívá se)
         {
            usb_get_packet(1, in_data, USB_CONFIG_HID_RX_SIZE);
         }
    delay_ms(8);//čekání 8ms(125Hz)

   }
}


