void serial_print(const char *fmt, ...) { va_list args; int n; va_start(args, fmt); n = vsprintf(sprint_buf, fmt, args); va_end(args); writeserial(sprint_buf, n); }
/* callback: forward from tun to serial line using slip */ static void forward_to_slip(int size) { int i; message("Packet to slip: %d bytes\n", size); writeserial(SLIP_END); for(i=0; i<size; i++) { if(tbuffer[i]==SLIP_END){ writeserial(SLIP_ESC); writeserial(SLIP_ESC_END); } else if(tbuffer[i]==SLIP_ESC){ writeserial(SLIP_ESC); writeserial(SLIP_ESC_ESC); } else { writeserial(tbuffer[i]); } } writeserial(SLIP_END); }
static void read_from_tun() { int i; int nRead; /* something has been received on tun_fd, we forward it to socket_fd */ nRead = read(tun_fd, (void *)tbuffer_shadow, DEV_MTU); check(nRead != -1,"read() from tun error"); nRead -= 4; printf("tunToSerial %d\n",nRead); writeserial(SLIP_END); for(i=0; i<nRead; i++) { if(tbuffer[i]==SLIP_END){ writeserial(SLIP_ESC); writeserial(SLIP_ESC_END); } else if(tbuffer[i]==SLIP_ESC){ writeserial(SLIP_ESC); writeserial(SLIP_ESC_ESC); } else { writeserial(tbuffer[i]); } } writeserial(SLIP_END); }
bool interactive_mode(mems_info * info, uint8_t * response_buffer) { size_t icmd_size = 8; char *icmd_buf_ptr; uint8_t icmd; ssize_t bytes_read = 0; ssize_t total_bytes_read = 0; bool quit = false; if ((icmd_buf_ptr = (char *)malloc(icmd_size)) != NULL) { printf("Enter a command (in hex) or 'quit'.\n> "); while (!quit && (fgets(icmd_buf_ptr, icmd_size, stdin) != NULL)) { if (strncmp(icmd_buf_ptr, "quit", 4) == 0) { quit = true; } else if (icmd_buf_ptr[0] != '\n' && icmd_buf_ptr[1] != '\r') { icmd = strtoul(icmd_buf_ptr, NULL, 16); if ((icmd >= 0) && (icmd <= 0xff)) { if (writeserial(info, &icmd, 1) == 1) { bytes_read = 0; total_bytes_read = 0; do { bytes_read = readserial(info, response_buffer + bytes_read, 1); total_bytes_read += bytes_read; } while (bytes_read > 0); if (total_bytes_read > 0) { printbuf(response_buffer, total_bytes_read); } else { printf("No response from ECU.\n"); } } else { printf("Error: failed to write command byte to serial port.\n"); } } else { printf("Error: command must be between 0x00 and 0xFF.\n"); } printf("> "); } else { printf("> "); } } free(icmd_buf_ptr); } else { printf("Error allocating command buffer memory.\n"); } }