Huang Qi 46f77a632d examples/usbserial: Fix style issues in host.c
- Break long preprocessor conditionals across multiple lines
- Add spaces around operators for better readability
- Reformat long string literals to fit within line length limits
- Improve consistency in spacing around parentheses and brackets

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
2025-01-11 12:23:29 +08:00

301 lines
11 KiB
C

/****************************************************************************
* apps/examples/usbserial/host.c
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <termios.h>
#include <fcntl.h>
#include <errno.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#if defined(CONFIG_EXAMPLES_USBSERIAL_INONLY) && \
defined(CONFIG_EXAMPLES_USBSERIAL_OUTONLY)
# error "Cannot define both CONFIG_EXAMPLES_USBSERIAL_INONLY and _OUTONLY"
#endif
#if defined(CONFIG_EXAMPLES_USBSERIAL_ONLYSMALL) && \
defined(CONFIG_EXAMPLES_USBSERIAL_ONLYBIG)
# error "Cannot define both CONFIG_EXAMPLES_USBSERIAL_ONLYSMALL and _ONLYBIG"
#endif
#if !defined(CONFIG_EXAMPLES_USBSERIAL_ONLYBIG) && \
!defined(CONFIG_EXAMPLES_USBSERIAL_ONLYSMALL)
# ifndef CONFIG_EXAMPLES_USBSERIAL_INONLY
# define COUNTER_NEEDED 1
# endif
#endif
#ifdef CONFIG_CDCACM
# define DEFAULT_TTYDEV "/dev/ttyACM0"
#else
# define DEFAULT_TTYDEV "/dev/ttyUSB0"
#endif
#define BUFFER_SIZE 1024
/****************************************************************************
* Private Data
****************************************************************************/
static const char *g_ttydev = DEFAULT_TTYDEV;
#ifndef CONFIG_EXAMPLES_USBSERIAL_ONLYBIG
static const char g_shortmsg[] = "Sure... You betcha!!\n";
#endif
#ifndef CONFIG_EXAMPLES_USBSERIAL_ONLYSMALL
static const char g_longmsg[] =
"I am proud to come to this city as the guest of your distinguished "
"Mayor, who has symbolized throughout the world the fighting spirit of "
"West Berlin. And I am proud to visit the Federal Republic with your "
"distinguished Chancellor who for so many years has committed Germany "
"to democracy and freedom and progress, and to come here in the company "
"of my fellow American, General Clay, who has been in this city during "
"its great moments of crisis and will come again if ever needed.\n"
"Two thousand years ago the proudest boast was \"civis Romanus sum.\" "
"Today, in the world of freedom, the proudest boast is "
"\"Ich bin ein Berliner.\"\r\"I appreciate my interpreter translating "
"my German!\nThere are many people in the world who really "
"don't understand, or say they don't, what is the great issue between "
"the free world and the Communist world. Let them come to Berlin. "
"There are some who say that communism is the wave of the future. "
"Let them come to Berlin. And there are some who say in Europe and "
"elsewhere we can work with the Communists. Let them come to Berlin. "
"And there are even a few who say that it is true that communism is "
"an evil system, but it permits us to make economic progress. "
"Lass' sie nach Berlin kommen. Let them come to Berlin.\n"
"Freedom has many difficulties and democracy is not perfect, but we have "
"never had to put a wall up to keep our people in, to prevent them from "
"leaving us. I want to say, on behalf of my countrymen, who live many "
"miles away on the other side of the Atlantic, who are far distant "
"from you, that they take the greatest pride that they have been able "
"to share with you, even from a distance, the story of the last 18 years. "
"I know of no town, no city, that has been besieged for 18 years that "
"still lives with the vitality and the force, and the hope and the "
"determination of the city of West Berlin. While the wall is the most "
"obvious and vivid demonstration of the failures of the Communist system, "
"for all the world to see, we take no satisfaction in it, for it is, "
"as your Mayor has said, an offense not only against history but an "
"offense against humanity, separating families, dividing husbands and "
"wives and brothers and sisters, and dividing a people who wish to be "
"joined together.\nWhat is true of this city is true of Germany--real, "
"lasting peace in Europe can never be assured as long as one German "
"out of four is denied the elementary right of free men, and that is "
"to make a free choice. In 18 years of peace and good faith, this "
"generation of Germans has earned the right to be free, including the "
"right to unite their families and their nation in lasting peace, "
"with good will to all people. You live in a defended island of freedom, "
"but your life is part of the main. So let me ask you as I close, to lift "
"your eyes beyond the dangers of today, to the hopes of tomorrow, beyond "
"the freedom merely of this city of Berlin, or your country of Germany, "
"to the advance of freedom everywhere, beyond the wall to the day of "
"peace with justice, beyond yourselves and ourselves to all mankind.\n"
"Freedom is indivisible, and when one man is enslaved, all are not free. "
"When all are free, then we can look forward to that day when this city "
"will be joined as one and this country and this great Continent of "
"Europe in a peaceful and hopeful globe. When that day finally comes, "
"as it will, the people of West Berlin can take sober satisfaction "
"in the fact that they were in the front lines for almost two decades.\n"
"All free men, wherever they may live, are citizens of Berlin, and, "
"therefore, as a free man, I take pride in the words "
"\"Ich bin ein Berliner.\"\n"
"President John F. Kennedy - June 26, 1963\n";
#endif
#ifndef CONFIG_EXAMPLES_USBSERIAL_OUTONLY
static char g_iobuffer[BUFFER_SIZE];
#endif
/****************************************************************************
* show_usage
****************************************************************************/
static void show_usage(const char *progname, int exitcode)
{
fprintf(stderr, "USAGE: %s [<ttydev>]\n", progname);
exit(exitcode);
}
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* main
****************************************************************************/
int main(int argc, char **argv, char **envp)
{
struct termios tty;
#ifndef CONFIG_EXAMPLES_USBSERIAL_OUTONLY
ssize_t nbytes;
#endif
#ifdef COUNTER_NEEDED
int count = 0;
#endif
int fd;
int ret;
/* Handle input parameters */
if (argc > 1)
{
if (argc > 2)
{
fprintf(stderr, "Too many arguments on command line\n");
show_usage(argv[0], 1);
}
g_ttydev = argv[1];
}
/* Open the USB serial device for blocking read/write */
do
{
printf("main: Opening USB serial driver\n");
fd = open(g_ttydev, O_RDWR);
if (fd < 0)
{
printf("main: ERROR: Failed to open %s: %s\n",
g_ttydev, strerror(errno));
printf("main: Assume not connected. Wait and try again.\n");
printf("main: (Control-C to terminate).\n");
sleep(5);
}
}
while (fd < 0);
printf("main: Successfully opened the serial driver\n");
/* Configure the serial port in raw mode (at least turn off echo) */
ret = tcgetattr(fd, &tty);
if (ret < 0)
{
printf("main: ERROR: Failed to get termios for %s: %s\n",
g_ttydev, strerror(errno));
close(fd);
return 1;
}
tty.c_iflag &=
~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON);
tty.c_oflag &= ~OPOST;
tty.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
tty.c_cflag &= ~(CSIZE | PARENB);
tty.c_cflag |= CS8;
ret = tcsetattr(fd, TCSANOW, &tty);
if (ret < 0)
{
printf("main: ERROR: Failed to set termios for %s: %s\n",
g_ttydev, strerror(errno));
close(fd);
return 1;
}
/* Wait for and/or send messages -- forever */
for (; ; )
{
/* Test IN messages (device-to-host) */
#ifndef CONFIG_EXAMPLES_USBSERIAL_OUTONLY
printf("main: Reading from the serial driver\n");
printf("main: ... (Control-C to terminate) ...\n");
nbytes = read(fd, g_iobuffer, BUFFER_SIZE - 1);
if (nbytes < 0)
{
printf("main: ERROR: Failed to read from %s: %s\n",
g_ttydev, strerror(errno));
close(fd);
return 2;
}
else if (nbytes == 0)
{
printf("main: End-of-file encountered\n");
break;
}
g_iobuffer[nbytes] = '\0';
printf("main: Received %ld bytes:\n", (long)nbytes);
printf(" \"%s\"\n", g_iobuffer);
#else
printf("main: Waiting...\n");
sleep(5);
#endif /* CONFIG_EXAMPLES_USBSERIAL_OUTONLY */
/* Test OUT messages (host-to-device) */
#ifndef CONFIG_EXAMPLES_USBSERIAL_INONLY
#if !defined(CONFIG_EXAMPLES_USBSERIAL_ONLYSMALL) && \
!defined(CONFIG_EXAMPLES_USBSERIAL_ONLYBIG)
count++;
if (count < 5)
{
printf("main: Sending %d bytes..\n", sizeof(g_shortmsg));
nbytes = write(fd, g_shortmsg, sizeof(g_shortmsg));
}
else
{
printf("main: Sending %d bytes..\n", sizeof(g_longmsg));
nbytes = write(fd, g_longmsg, sizeof(g_longmsg));
count = 0;
}
#elif !defined(CONFIG_EXAMPLES_USBSERIAL_ONLYSMALL)
printf("main: Sending %d bytes..\n", sizeof(g_longmsg));
nbytes = write(fd, g_longmsg, sizeof(g_longmsg));
#else /* !defined(CONFIG_EXAMPLES_USBSERIAL_ONLYBIG) */
printf("main: Sending %d bytes..\n", sizeof(g_shortmsg));
nbytes = write(fd, g_shortmsg, sizeof(g_shortmsg));
#endif
/* Test if write was successful */
if (nbytes < 0)
{
printf("main: ERROR: Failed to write to %s: %s\n", g_ttydev,
strerror(errno));
close(fd);
return 2;
}
printf("main: %ld bytes sent\n", (long)nbytes);
#endif /* CONFIG_EXAMPLES_USBSERIAL_INONLY */
}
close(fd);
return 0;
}