void CC_t::Task(void) { if (IsShutdown) return; // Do with CC what needed GetState(); switch (State) { case CC_STB_RX_OVF: klPrintf("RX ovf\r"); FlushRxFIFO(); break; case CC_STB_TX_UNDF: klPrintf("TX undf\r"); FlushTxFIFO(); break; case CC_STB_IDLE: if (SearchState == IsWaiting) { EnterRX(); } else { //klPrintf("TX\r"); // Prepare packet to send TX_Pkt.To = 207; WriteTX(); EnterTX(); //klPrintf("TX\r"); } break; default: // Just get out in other cases //klPrintf("Other: %X\r", State); break; } //Switch }
boolean CDWHCIDevice::InitHost (void) { // Restart the PHY clock CDWHCIRegister Power (ARM_USB_POWER, 0); Power.Write (); CDWHCIRegister HostConfig (DWHCI_HOST_CFG); HostConfig.Read (); HostConfig.And (~DWHCI_HOST_CFG_FSLS_PCLK_SEL__MASK); CDWHCIRegister HWConfig2 (DWHCI_CORE_HW_CFG2); CDWHCIRegister USBConfig (DWHCI_CORE_USB_CFG); if ( DWHCI_CORE_HW_CFG2_HS_PHY_TYPE (HWConfig2.Read ()) == DWHCI_CORE_HW_CFG2_HS_PHY_TYPE_ULPI && DWHCI_CORE_HW_CFG2_FS_PHY_TYPE (HWConfig2.Get ()) == DWHCI_CORE_HW_CFG2_FS_PHY_TYPE_DEDICATED && (USBConfig.Read () & DWHCI_CORE_USB_CFG_ULPI_FSLS)) { HostConfig.Or (DWHCI_HOST_CFG_FSLS_PCLK_SEL_48_MHZ); } else { HostConfig.Or (DWHCI_HOST_CFG_FSLS_PCLK_SEL_30_60_MHZ); } HostConfig.Write (); #ifdef DWC_CFG_DYNAMIC_FIFO CDWHCIRegister RxFIFOSize (DWHCI_CORE_RX_FIFO_SIZ, DWC_CFG_HOST_RX_FIFO_SIZE); RxFIFOSize.Write (); CDWHCIRegister NonPeriodicTxFIFOSize (DWHCI_CORE_NPER_TX_FIFO_SIZ, 0); NonPeriodicTxFIFOSize.Or (DWC_CFG_HOST_RX_FIFO_SIZE); NonPeriodicTxFIFOSize.Or (DWC_CFG_HOST_NPER_TX_FIFO_SIZE << 16); NonPeriodicTxFIFOSize.Write (); CDWHCIRegister HostPeriodicTxFIFOSize (DWHCI_CORE_HOST_PER_TX_FIFO_SIZ, 0); HostPeriodicTxFIFOSize.Or (DWC_CFG_HOST_RX_FIFO_SIZE + DWC_CFG_HOST_NPER_TX_FIFO_SIZE); HostPeriodicTxFIFOSize.Or (DWC_CFG_HOST_PER_TX_FIFO_SIZE << 16); HostPeriodicTxFIFOSize.Write (); #endif FlushTxFIFO (0x10); // Flush all TX FIFOs FlushRxFIFO (); CDWHCIRegister HostPort (DWHCI_HOST_PORT); HostPort.Read (); HostPort.And (~DWHCI_HOST_PORT_DEFAULT_MASK); if (!(HostPort.Get () & DWHCI_HOST_PORT_POWER)) { HostPort.Or (DWHCI_HOST_PORT_POWER); HostPort.Write (); } EnableHostInterrupts (); return TRUE; }
// ========================== Implementation =================================== void CC_t::Task(void) { // Do with CC what needed GetState(); switch (State){ case CC_STB_RX_OVF: FlushRxFIFO(); klPrintf("RX_OVF"); break; case CC_STB_TX_UNDF: FlushTxFIFO(); klPrintf("\rTX_OVF"); break; case CC_STB_IDLE: //Uart.PrintString("\rIDLE"); //EnterRX(); if (Delay.Elapsed(&Timer, 100)) { klPrintf("TX\r"); // Prepare packet to send TX_Pkt.PktID++; WriteTX(); //CC.EnterTXAndWaitToComplete(); EnterTX(); } break; case CC_STB_RX: //Uart.PrintString("\rRX"); // if (GDO0_IsHi()) GDO0_WasHi = true; // // Check if GDO0 has fallen // else if (GDO0_WasHi) { // //UART_PrintString("\rIRQ\r"); // GDO0_WasHi = false; // FifoSize = ReadRegister(CC_RXBYTES); // Get number of bytes in FIFO // if (FifoSize != 0) { // ReadRX(RX_PktArray, (CC_PKT_LEN+2)); // Read two extra bytes of RSSI & LQI // EVENT_NewPacket(); // } // if size>0 // } // if falling edge break; case CC_STB_TX: //UART_PrintString("\rTX"); break; default: // Just get out in other cases //Uart.PrintString("\rOther: "); //Uart.PrintUint(CC.State); break; }//Switch }
// ========================== Implementation =================================== void CC_t::Task(void) { // static uint32_t Tmr; // if(!Delay.Elapsed(&Tmr, 99)) return; GetState(); switch (IState) { case CC_STB_RX_OVF: FlushRxFIFO(); Uart.Printf("RX ovf\r"); break; case CC_STB_TX_UNDF: FlushTxFIFO(); Uart.Printf("TX ovf\r"); break; case CC_STB_IDLE: // Reenter RX if packet was jammed if (Aim == caRx) EnterRX(); break; default: // Just get out in other cases break; } //Switch //if ((IState != CC_STB_IDLE) or (IState != CC_STB_RX)) klPrintf("State: %X\r", IState); }
void CC_t::Task(void) { // Proceed with state processing GetState(); switch (State) { case CC_STB_RX_OVF: Uart.Printf("RX ovf\r"); FlushRxFIFO(); break; case CC_STB_TX_UNDF: Uart.Printf("TX undf\r"); FlushTxFIFO(); break; case CC_STB_IDLE: if (SearchState == IsCalling) { // Call alien WriteTX(); //klPrintf("TX: %u\r", TX_Pkt.To); EnterTX(); } else { // Is waiting if (Delay.Elapsed(&Timer, RX_WAIT_TIME)) SearchState = IsCalling; else EnterRX(); } break; case CC_STB_RX: if (Delay.Elapsed(&Timer, RX_WAIT_TIME)) { SearchState = IsCalling; EnterIdle(); // Note that all was interrogated if((TX_Pkt.To == MAX_ADDRESS) and (PktCounter == TRY_COUNT-1)) Signal.AllThemCalled = true; } break; default: // Just get out in other cases //klPrintf("Other: %X\r", State); break; } //Switch }