USB Device - Joystick/Mouse  1.0
Macros | Functions | Variables
usb.cpp File Reference
#include "usb.h"
#include "hal.h"
#include "led.h"
#include "log.h"
#include "stm32f4xx.h"
#include "usb_defines.h"
#include "usb_regs.h"

Macros

#define USB_GINTMSK   (USB_OTG_GREGS *)(USB_OTG_FS_BASE_ADDR + 0x18)
 Registr preruseni. More...
 
#define USB_G_BASE   (USB_OTG_GREGS *)(USB_OTG_FS_BASE_ADDR )
 Core registr. More...
 
#define USB_D_BASE   (USB_OTG_DREGS *)(USB_OTG_FS_BASE_ADDR + USB_OTG_DEV_GLOBAL_REG_OFFSET)
 Device registr. More...
 
#define USB_H_BASE   (USB_OTG_HREGS *)(USB_OTG_FS_BASE_ADDR + USB_OTG_HOST_GLOBAL_REG_OFFSET )
 Host registr - neni pouzit. More...
 
#define PGGCCTL_BASE   (uint32_t *)(USB_OTG_FS_BASE_ADDR + USB_OTG_PCGCCTL_OFFSET)
 Registr pro power a hodiny. More...
 
#define USB_EPx__IN(x)   (USB_OTG_INEPREGS *) (USB_OTG_FS_BASE_ADDR + USB_OTG_DEV_IN_EP_REG_OFFSET + (x * USB_OTG_EP_REG_OFFSET))
 IN endpointy. More...
 
#define USB_EPx__OUT(x)   (USB_OTG_OUTEPREGS *) (USB_OTG_FS_BASE_ADDR + USB_OTG_DEV_OUT_EP_REG_OFFSET + (x * USB_OTG_EP_REG_OFFSET))
 OUT enpointy. More...
 
#define USB_HC_REGS(x)   (USB_OTG_HC_REGS *)(USB_OTG_FS_BASE_ADDR + USB_OTG_HOST_CHAN_REGS_OFFSET + (x * USB_OTG_CHAN_REGS_OFFSET))
 HOST registry - nepouzity. More...
 
#define USB_HC_FIFOS(x)   (uint32_t *)(USB_OTG_FS_BASE_ADDR + USB_OTG_DATA_FIFO_OFFSET + (x * USB_OTG_DATA_FIFO_SIZE))
 FIFO pro registry. More...
 

Functions

void DelayUsec (const uint32_t _usec)
 Funkce aktivne ceka. More...
 
void FlushFifoTx (uint32_t _ep)
 Splachni TX FIFO pro dany endpoint. More...
 
void FlushFifoRx ()
 Splachni RX FIFO pro vsechny EP. More...
 
void enableDevInt ()
 Povoli vsechny potrebna preruseni Hlavne usbreset,enumdone,inepintr,outepintr,rxstsqlvl. More...
 
void initEps ()
 Inicializace vsechny user IN a OUT Endpointuu Inicializuje 4 IN a 4 OUT user endpointy. More...
 
void USBInit ()
 Vlastni inicializace USB Funkce nastavi GPIO piny. More...
 
void EPActivate (uint8_t _epAddr, uint16_t _maxPacket, uint8_t _epType)
 Aktivace endpointu Aktivuje endpoint s adresou _epAddr, max velikosti packetu _maxPacket a nastavi typ endpointu na _epType. More...
 
void EPClose (uint8_t _epAddr)
 Uzavre dany EP. More...
 
void EP0StartXfer (__IO SUsbEP *_ep)
 Zapocne prenos na EP0 a podle _ep na EP OUT nebo IN. More...
 
void EPStartXfer (__IO SUsbEP *_ep)
 Zapocne prenos na EP IN podle _ep. More...
 
void EPTransfer (uint8_t _epAddr, __IO uint8_t *_buff, uint16_t _buffLen)
 Prenos EP. More...
 
void EPReceive (uint8_t _epAddr)
 Analogie k funkce EPTransfer. More...
 
void CtlSendData (__IO uint8_t *_buff, uint16_t _buffLen)
 Odesle data na EP0. More...
 
uint16_t usbMemcpy (uint8_t *_pbuf, char const *_str, uint16_t _len)
 NEFUNKNCI Pripravi v bufferu _pbuf string z _str o velikosti _len. More...
 
void ReadPacket (__IO uint8_t *_dest, uint16_t _len)
 Precte z EP0 FIFO packet a ulozi do _dest. More...
 
void parseSetupRequest (SUsbSetupPckt *_req)
 Rozparsuje data ze setupPacket do _req. More...
 
void WritePacket (__IO uint8_t *_buff, uint8_t _epnum, uint16_t _len)
 Analogie k ReadPacket. More...
 
void WriteEmpTXFifo (uint32_t epnum)
 Zkontroluje jestli dany ep nema jeste data pro FIFO. More...
 
void DataInStageIN (uint8_t _epNum)
 Posle DATA packet na USB. More...
 
void getDescriptor (SUsbSetupPckt *_req)
 Posle descriptor dle dotazu v _req. More...
 
void setAddress (SUsbSetupPckt *_req)
 Nastavi adresu pri SET ADDRESS packetu. More...
 
void setConfig (SUsbSetupPckt *req)
 Nastavi konfiguraci USB a aktivuje EP1 pro odesilani dat. More...
 
void DeviceRequest (SUsbSetupPckt *req)
 Zjisti o jaky request se jedna a zavola prislusnou funkci. More...
 
void InterfaceRequest (SUsbSetupPckt *req)
 Odesle/Odpovi na dotaz na interface. More...
 
void OTG_FS_IRQHandler (void)
 Preruseni od USB. More...
 
void hard_fault_handler_c (unsigned int *hardfault_args)
 Funkce je volana pri hard fault. More...
 
void USBSendMouseMove (uint8_t *_mouseStat, uint16_t _len)
 Uzivatelska funkce pro odeslani pohybu mysi. More...
 

Variables

__IO USB_OTG_GREGS * usbGREGS
 Global registers. More...
 
__IO USB_OTG_DREGS * usbDREGS
 Device registers. More...
 
__IO USB_OTG_HREGS * usbHREGS
 Host registers. More...
 
__IO USB_OTG_INEPREGS * inEndpoints [MAX_EPS]
 Endpoints in registers. More...
 
__IO USB_OTG_OUTEPREGS * outEndpoints [MAX_EPS]
 Endpoints out registers. More...
 
__IO uint32_t * PGCCTLREG
 PGCCTL register. More...
 
__IO uint32_t * usbDFIFO [USB_OTG_MAX_TX_FIFOS]
 Device dndpoint FIFOS. More...
 
__IO SUsbEP inLocEPs [MAX_EPS]
 Lokalni endpointy, jejich data apod. More...
 
__IO SUsbEP outLocEps [MAX_EPS]
 Lokalni endpointy, jejich data apod. More...
 
__IO uint8_t setupPacket [8 *3]
 SetuPackets. More...
 
__IO EDevState deviceState
 Stav zarizeni pri prijimani DATA/SETUP. More...
 
__IO EDevStatus deviceStatus
 Faze zariyeni DEFAULT - ADDRESSED - CONFIGURED apod.... More...
 
__IO uint8_t usbConfig
 Id konfigurace - v tomto pripade nepouzito. More...
 

Macro Definition Documentation

#define PGGCCTL_BASE   (uint32_t *)(USB_OTG_FS_BASE_ADDR + USB_OTG_PCGCCTL_OFFSET)

Registr pro power a hodiny.

#define USB_D_BASE   (USB_OTG_DREGS *)(USB_OTG_FS_BASE_ADDR + USB_OTG_DEV_GLOBAL_REG_OFFSET)

Device registr.

#define USB_EPx__IN (   x)    (USB_OTG_INEPREGS *) (USB_OTG_FS_BASE_ADDR + USB_OTG_DEV_IN_EP_REG_OFFSET + (x * USB_OTG_EP_REG_OFFSET))

IN endpointy.

#define USB_EPx__OUT (   x)    (USB_OTG_OUTEPREGS *) (USB_OTG_FS_BASE_ADDR + USB_OTG_DEV_OUT_EP_REG_OFFSET + (x * USB_OTG_EP_REG_OFFSET))

OUT enpointy.

#define USB_G_BASE   (USB_OTG_GREGS *)(USB_OTG_FS_BASE_ADDR )

Core registr.

#define USB_GINTMSK   (USB_OTG_GREGS *)(USB_OTG_FS_BASE_ADDR + 0x18)

Registr preruseni.

#define USB_H_BASE   (USB_OTG_HREGS *)(USB_OTG_FS_BASE_ADDR + USB_OTG_HOST_GLOBAL_REG_OFFSET )

Host registr - neni pouzit.

#define USB_HC_FIFOS (   x)    (uint32_t *)(USB_OTG_FS_BASE_ADDR + USB_OTG_DATA_FIFO_OFFSET + (x * USB_OTG_DATA_FIFO_SIZE))

FIFO pro registry.

#define USB_HC_REGS (   x)    (USB_OTG_HC_REGS *)(USB_OTG_FS_BASE_ADDR + USB_OTG_HOST_CHAN_REGS_OFFSET + (x * USB_OTG_CHAN_REGS_OFFSET))

HOST registry - nepouzity.

Function Documentation

void CtlSendData ( __IO uint8_t *  _buff,
uint16_t  _buffLen 
)

Odesle data na EP0.

Funkce slouzi pro odesilani deskriptoruu

Parameters
_buffBuffer s SETUP daty
_buffLenvelikost dat v SETUP datech
void DataInStageIN ( uint8_t  _epNum)

Posle DATA packet na USB.

Parameters
_epNumCislo endpointu
void DelayUsec ( const uint32_t  _usec)

Funkce aktivne ceka.

Cekani zavisi na nastavene rychlosti/zatizeni CPU

@param _usec pocet mikrosekund k cekani
void DeviceRequest ( SUsbSetupPckt req)

Zjisti o jaky request se jedna a zavola prislusnou funkci.

Parameters
reqRequest
void enableDevInt ( )

Povoli vsechny potrebna preruseni Hlavne usbreset,enumdone,inepintr,outepintr,rxstsqlvl.

void EP0StartXfer ( __IO SUsbEP _ep)

Zapocne prenos na EP0 a podle _ep na EP OUT nebo IN.

Parameters
_epEndpoint, ktery slouzi jako EP0
void EPActivate ( uint8_t  _epAddr,
uint16_t  _maxPacket,
uint8_t  _epType 
)

Aktivace endpointu Aktivuje endpoint s adresou _epAddr, max velikosti packetu _maxPacket a nastavi typ endpointu na _epType.

Parameters
_epAddrAdresa endpointu
_maxPacketMaximalni velikost packetu
_epTypeTyp endpointu
void EPClose ( uint8_t  _epAddr)

Uzavre dany EP.

Parameters
_epAddrAdresa endpointu
void EPReceive ( uint8_t  _epAddr)

Analogie k funkce EPTransfer.

Na zaklade adresy epAddr, pripravy dany OUT EP pro prijem

Parameters
_epAddrAdresa endpointu
void EPStartXfer ( __IO SUsbEP _ep)

Zapocne prenos na EP IN podle _ep.

Parameters
_epEndpoint, na kterem to budeme prenaset
void EPTransfer ( uint8_t  _epAddr,
__IO uint8_t *  _buff,
uint16_t  _buffLen 
)

Prenos EP.

Pripravi user ep a zavola fce EP0StartXfer nebo EPStartXfer na zaklade _epAddr

Parameters
_epAddrAdresa endpointu
_buffBuffer s daty, ktere budu prenaset
_buffLenVelikost dat v _buff
void FlushFifoRx ( )

Splachni RX FIFO pro vsechny EP.

void FlushFifoTx ( uint32_t  _ep)

Splachni TX FIFO pro dany endpoint.

Parameters
_epEndpoint, pro ktery mazu FIFO
void getDescriptor ( SUsbSetupPckt _req)

Posle descriptor dle dotazu v _req.

Parameters
_reqRequest
void hard_fault_handler_c ( unsigned int *  hardfault_args)

Funkce je volana pri hard fault.

Ve funkci je mozna zkontrolovat registry, ulozene adresy a dalsi... Slouzi pro DEBUG pri chybe. Napr. pri pristupu mimo pamet.

Parameters
hardfault_argsulozene argumenty hard faultu
void initEps ( )

Inicializace vsechny user IN a OUT Endpointuu Inicializuje 4 IN a 4 OUT user endpointy.

Kazdy nastavi jako kontrolni. Priradi Velikost FIFO, Cislo EP,

void InterfaceRequest ( SUsbSetupPckt req)

Odesle/Odpovi na dotaz na interface.

Parameters
reqRequest
void OTG_FS_IRQHandler ( void  )

Preruseni od USB.

Zavola prislusnou funkci, ktera preruseni zpracuje

void parseSetupRequest ( SUsbSetupPckt _req)

Rozparsuje data ze setupPacket do _req.

Parameters
_reqcil usb setup packet struct
void ReadPacket ( __IO uint8_t *  _dest,
uint16_t  _len 
)

Precte z EP0 FIFO packet a ulozi do _dest.

Parameters
_destBuffer, do ktereho se ulozi prijata data
_lenBisto v _dest
void setAddress ( SUsbSetupPckt _req)

Nastavi adresu pri SET ADDRESS packetu.

Parameters
_reqRequest
void setConfig ( SUsbSetupPckt req)

Nastavi konfiguraci USB a aktivuje EP1 pro odesilani dat.

Parameters
reqRequest
void USBInit ( )

Vlastni inicializace USB Funkce nastavi GPIO piny.

Priradi Pinum alternativni funkci USB FS. Nastavi zakladni adresy promennym pro obsluhu USB registruu. Dle manualu nastavi usb CORE pro prijem usbreset. Predpriravi EP.

uint16_t usbMemcpy ( uint8_t *  _pbuf,
char const *  _str,
uint16_t  _len 
)

NEFUNKNCI Pripravi v bufferu _pbuf string z _str o velikosti _len.

Parameters
_pbufBuffer do ktereho se cpe usb string packet
_strstring ktery se bude cpat do _pbuf
_lenvelikost _str
Returns
velikost ulozena do _pbuf
void USBSendMouseMove ( uint8_t *  _mouseStat,
uint16_t  _len 
)

Uzivatelska funkce pro odeslani pohybu mysi.

Parameters
_mouseStatpole bytu se stavem(pohybem) mysi
_lenvelikost (pocet bajtu) v _mouseStat
void WriteEmpTXFifo ( uint32_t  epnum)

Zkontroluje jestli dany ep nema jeste data pro FIFO.

Parameters
epnumEndpoint ke kontrole
void WritePacket ( __IO uint8_t *  _buff,
uint8_t  _epnum,
uint16_t  _len 
)

Analogie k ReadPacket.

Zapise data z _buff do FIFO daneho ep(_epnum)

Parameters
_buffBuffer s daty k zapsani do FIFO
_lenvelikost dat k zapsani
_epnumcislo endpointu

Variable Documentation

__IO EDevState deviceState

Stav zarizeni pri prijimani DATA/SETUP.

__IO EDevStatus deviceStatus

Faze zariyeni DEFAULT - ADDRESSED - CONFIGURED apod....

__IO USB_OTG_INEPREGS* inEndpoints[MAX_EPS]

Endpoints in registers.

__IO SUsbEP inLocEPs[MAX_EPS]

Lokalni endpointy, jejich data apod.

__IO USB_OTG_OUTEPREGS* outEndpoints[MAX_EPS]

Endpoints out registers.

__IO SUsbEP outLocEps[MAX_EPS]

Lokalni endpointy, jejich data apod.

__IO uint32_t* PGCCTLREG

PGCCTL register.

__IO uint8_t setupPacket[8 *3]

SetuPackets.

__IO uint8_t usbConfig

Id konfigurace - v tomto pripade nepouzito.

__IO uint32_t* usbDFIFO[USB_OTG_MAX_TX_FIFOS]

Device dndpoint FIFOS.

__IO USB_OTG_DREGS* usbDREGS

Device registers.

__IO USB_OTG_GREGS* usbGREGS

Global registers.

__IO USB_OTG_HREGS* usbHREGS

Host registers.