// ----------------------------------------------------------------- // Name : readString // ----------------------------------------------------------------- std::string JoSon::readString(std::stringstream * stream) { std::stringstream str; char first = 0; char c = getNextChar(stream); if (c == '\"' || c == '\'') { first = c; while (stream->good()) { c = streamGet(stream); if (c == first) { break; } else { str << c; } } } else { streamUnget(stream); while (stream->good()) { c = streamGet(stream); if (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == ',' || c == ':' || c == ']' || c == '}') { // This is end of string condition streamUnget(stream); break; } else { str << c; } } } return str.str(); }
int main(void) { halInit(); chSysInit(); chBSemObjectInit(&frame_thread_sem, false); bus_init(); power_init(); sduObjectInit(&SDU1); sduStart(&SDU1, &serusbcfg); usbDisconnectBus(serusbcfg.usbp); chThdSleepMilliseconds(1500); usbStart(serusbcfg.usbp, &usbcfg); usbConnectBus(serusbcfg.usbp); chThdCreateStatic(frame_thread_wa, sizeof(frame_thread_wa), NORMALPRIO, frame_thread, NULL); while(true) { usb_rx(streamGet(&SDU1)); } }
// ----------------------------------------------------------------- // Name : getNextChar // ----------------------------------------------------------------- char JoSon::getNextChar(std::stringstream * stream) { while (stream->good()) { char c = streamGet(stream); if (c != ' ' && c != '\t' && c != '\n' && c != '\r') { return c; } } return 0; }
bool readline(Stream * cbp, char* buf, const uint16_t max) { char x; uint16_t i=0; for (i=0; i<max; i++) { x = streamGet(cbp); if (x == 0x03) /* CTRL-C */ return false; if (x == '\r') { /* Get LINEFEED */ streamGet(cbp); break; } if (x == '\n') break; buf[i]=x; } buf[i] = '\0'; return true; }
/** * @brief Reads a whole line from the input channel. * * @param[in] chp pointer to a @p BaseChannel object * @param[in] line pointer to the line buffer * @param[in] size buffer maximum length * @return The operation status. * @retval TRUE the channel was reset or CTRL-D pressed. * @retval FALSE operation successful. */ static bool getConsoleLine(BaseSequentialStream *chp, char *line, unsigned size) { char *p = line; while (true) { if (!isCommandLineConsoleReady()) { // we better do not read from USB serial before it is ready chThdSleepMilliseconds(10); continue; } short c = (short) streamGet(chp); onDataArrived(); #if defined(EFI_CONSOLE_UART_DEVICE) || defined(__DOXYGEN__) if (isCommandLineConsoleOverTTL()) { uint32_t flags; chSysLock() ; flags = chEvtGetAndClearFlagsI(&consoleEventListener); chSysUnlock() ; if (flags & SD_OVERRUN_ERROR) { // firmwareError(OBD_PCM_Processor_Fault, "serial overrun"); } } #endif #if EFI_UART_ECHO_TEST_MODE /** * That's test code - let's test connectivity */ consolePutChar((uint8_t) c); continue; #endif if (c < 0 || c == 4) { return true; } if (c == 8) { if (p != line) { // backspace consolePutChar((uint8_t) c); consolePutChar(0x20); consolePutChar((uint8_t) c); p--; } continue; } if (c == '\r') { consolePutChar('\r'); consolePutChar('\n'); *p = 0; return false; } if (c == '\n') { consolePutChar('\n'); *p = 0; return false; } if (c < 0x20) { continue; } if (p < line + size - 1) { consolePutChar((uint8_t) c); *p++ = (char) c; } } }