//--------------------------------------------------------------------------- // Process each charcter received to do minimal line editing void __fastcall TClientForm::ProcessChar(char Ch) { if (Ch == '\b') { if (FCommand.Length() > 0) { FCommand.SetLength(FCommand.Length() - 1); Socket->SendStr(RawByteString("\b \b")); } else Socket->SendStr(RawByteString('\a')); return; } else if ((Ch == '\n') && FRcvdCR) { // Ignore LF just after CR (CR/LF is normal end of line) FRcvdCR = FALSE; return; } else if (Ch == '\r') { FRcvdCR = TRUE; CommandInterpreter(); return; } else if (Ch == '\n') { CommandInterpreter(); return; } // Ordinary character, put in buffer in some place left FCommand = FCommand + Ch; // Echo to client Socket->Send(&Ch, 1); }
GMC_DCL(tp_Str, Str) { tp_Nod Root; Root = OC_Parser(Str, (tp_FileName)NIL, (int *)NIL); if (Root == ERROR) { *AbortPtr = TRUE; return; }/*if*/; if (VerifyLevel >= 2 && IsTTY) { Test_All(); }/*if*/; CommandInterpreter(AbortPtr, Root, IsTTY); Ret_Nod(Root); }/*TopLevelCI*/
/** * Main is used to: * Initialize drivers * Create threads * Pass drivers structures to threads */ int main( void ) { /* * Enable internal 32 MHz ring oscillator and wait until it's * stable. Set the 32 MHz ring oscillator as the main clock source. */ CLKSYS_Enable( OSC_RC32MEN_bm ); CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc ); do {} while ( CLKSYS_IsReady( OSC_RC32MRDY_bm ) == 0 ); CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_RC32M_gc ); //Enable watchdog timer, which will be reset by timer WDT_EnableAndSetTimeout( WDT_PER_1KCLK_gc ); /* * Do all configuration and create all tasks and queues before scheduler is started. * It is possible to put initialization of peripherals like displays into task functions * (which will be executed after scheduler has started) if fast startup is needed. * Interrupts are not enabled until the call of vTaskStartScheduler(); */ // Enable the Round-Robin Scheduling scheme.Round-Robin scheme ensures that no low-level // interrupts are “starved”, as the priority changes continuously PMIC_EnableRoundRobin(); //Create and start the timer, which will reset Watch Dog Timer xTimerStart(xTimerCreate((signed char*)"WDT",500, pdTRUE, 0, watchdogTimerCallback), 0); //---------Use USART on PORTC---------------------------- Serial usartFTDI = Serial(&USARTE0, BAUD9600, 128, 10); // Initialize SPI slave on port D SpiSlave spiSlave = SpiSlave(&SPIC,false,SPI_MODE_1_gc,64); // Initialize SPI master on port C SpiMaster spiMaster = SpiMaster(&SPID, false, SPI_MODE_1_gc, false, SPI_PRESCALER_DIV4_gc); SpiDevice spiDevice = SpiDevice(&spiMaster, &PORTD, SPI_SS_bm); //---------Start LED task for testing purposes----------- ledRGB = LedGroup(3); ledRGB.add(&PORTF, 0x04,1 );//R ledRGB.add(&PORTF, 0x08,1 );//G ledRGB.add(&PORTF, 0x02,1 );//B ledRGB.set(BLUE); LedProcessorThread ledRGBEThread = LedProcessorThread(&ledRGB, GREEN, 500, "RGB", 64, configLOW_PRIORITY); LedGroup ledString = LedGroup(7); ledString.add(&PORTA, 0x02, 0); ledString.add(&PORTA, 0x04, 0); ledString.add(&PORTA, 0x08, 0); ledString.add(&PORTA, 0x10, 0); ledString.add(&PORTA, 0x20, 0); ledString.add(&PORTA, 0x40, 0); ledString.add(&PORTA, 0x80, 0); LedProcessorThread ledStringThread = LedProcessorThread(&ledString, "STR", 64, configLOW_PRIORITY); // ***** Start main Looper Looper looper = Looper(10, "LPR", 750, configNORMAL_PRIORITY); //XXX why it is not working if on the heap not on the stack? //ExampleHandler *exampleHandler = (ExampleHandler*) pvPortMalloc(sizeof(ExampleHandler)); //*exampleHandler = ExampleHandler(looper, spiDevice, ledStringQueue, usartFTDI); ExampleHandler exampleHandler = ExampleHandler(&looper, &spiDevice, &ledStringThread, &usartFTDI); // ****** Register commands for the interpreter CommandInterpreter interpreter = CommandInterpreter(); interpreter.registerCommand(Strings_SpiExampleCmd, Strings_SpiExampleCmdDesc, &exampleHandler, EVENT_RUN_SPI_TEST); interpreter.registerCommand(Strings_BlinkCmd, Strings_BlinkCmdDesc, &exampleHandler, EVENT_BLINK); CommandInterpreterThread cmdIntThreadFTDI = CommandInterpreterThread(&interpreter, 32, &usartFTDI, "I12", 128, configNORMAL_PRIORITY); PinChangeController pinChangeController = PinChangeController(); pinChangeController.registerOnPinChangeListener(&exampleHandler, &PORTD, PIN2_bm, PORT_OPC_TOTEM_gc, PORT_ISC_RISING_gc); // ****** Start stand-alone tasks SpiSlaveThread spiSlaveThread = SpiSlaveThread(&spiSlave, &usartFTDI, "SLV", 128, configLOW_PRIORITY); /* Start scheduler. Creates idle task and returns if failed to create it. * vTaskStartScheduler never returns during normal operation. It is unlikely that XMEGA port will need to * dynamically create tasks or queues. To ensure stable work, create ALL tasks and ALL queues before * vTaskStartScheduler call. * Interrupts would be enabled by calling PMIC_EnableLowLevel();*/ vTaskStartScheduler(); /* Should never get here, stop execution and report error */ while(true) ledRGB.set(PINK); return 0; }