#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <termios.h>
#include <pthread.h>
//串口初始化功能函数,fd:串口驱动设备的文件描述符
int tty_init(int fd)
{
//串口参数结构体
struct termios old_uart,new_uart;
//清空结构体变量内容,memset
bzero(&old_uart,sizeof(struct termios));
bzero(&new_uart,sizeof(struct termios));
//获取串口属性,旧的串口
tcgetattr(fd,&old_uart);
//设置原始属性,重新设置属性
cfmakeraw(&new_uart);
//激活本地连接CLOCAL与接收使能CREAD的选项
new_uart.c_cflag |= CLOCAL|CREAD;
//设置输出、输入波特率
cfsetospeed(&new_uart, B115200);
cfsetispeed(&new_uart, B115200);
//设置数据位为8位
new_uart.c_cflag &= ~CSIZE;
new_uart.c_cflag |= CS8;
//无校验位
new_uart.c_cflag &= ~PARENB;
//1个停止位
new_uart.c_cflag &= ~CSTOPB;
//设置等待时间、最小接收字符个数
new_uart.c_cc[VTIME] = 0;
new_uart.c_cc[VMIN] = 1;
new_uart.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); //本地模式设置为原始模式
//清空缓冲区
tcflush(fd,TCIOFLUSH);
//设置串口属性到文件中 -- 生效属性
tcsetattr(fd, TCSANOW,&new_uart);
return 0;
}
void *BLE_Send(void *arg)
{
int ble_fd = *(int *)arg; //获取文件描述符
char *s_msg = (char *)malloc(1024); //申请写入数据的空间
while(1)
{
printf("send:");
//从键盘输入数据保存到msg中
fgets(s_msg,1024,stdin);
write(ble_fd,s_msg,strlen(s_msg)); //写数据
if(strncmp(s_msg,"quit",4)==0)
{
memset(s_msg,0,1024);
break;
}
//清空内存
memset(s_msg,0,1024);
}
//释放堆空间
free(s_msg);
}
void *BLE_Recv(void *arg)
{
int ble_fd = *(int *)arg; //获取文件描述符
char *r_msg = (char *)malloc(1024); //申请接收数据的空间
while(1)
{
//读取串口接收的数据
read(ble_fd,r_msg,1024);
printf("recv:%s\n",r_msg);
if(strncmp(r_msg,"quit",4)==0)
{
memset(r_msg,0,1024);
break;
}
//清空内存
memset(r_msg,0,1024);
}
//释放堆空间
free(r_msg);
}
int main(int argc,char *argv[])
{
pthread_t ble_tid1=0,ble_tid2=0;
//访问串口1驱动
int ble_fd = open("/dev/ttySAC1",O_RDWR);
if(ble_fd==-1)
{
printf("open BLE error...\n");
return -1;
}
//串口初始化
tty_init(ble_fd);
//串口数据读写线程
pthread_create(&ble_tid1,NULL,BLE_Send,(void *)&ble_fd);
pthread_create(&ble_tid2,NULL,BLE_Recv,(void *)&ble_fd);
//接合线程
pthread_join(ble_tid1,NULL);
pthread_join(ble_tid2,NULL);
//关闭文件
close(ble_fd);
return 0;
}#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <termios.h>
#include <pthread.h>
//串口初始化功能函数,fd:串口驱动设备的文件描述符
int tty_init(int fd)
{
//串口参数结构体
struct termios old_uart,new_uart;
//清空结构体变量内容,memset
bzero(&old_uart,sizeof(struct termios));
bzero(&new_uart,sizeof(struct termios));
//获取串口属性,旧的串口
tcgetattr(fd,&old_uart);
//设置原始属性,重新设置属性
cfmakeraw(&new_uart);
//激活本地连接CLOCAL与接收使能CREAD的选项
new_uart.c_cflag |= CLOCAL|CREAD;
//设置输出、输入波特率
cfsetospeed(&new_uart, B115200);
cfsetispeed(&new_uart, B115200);
//设置数据位为8位
new_uart.c_cflag &= ~CSIZE;
new_uart.c_cflag |= CS8;
//无校验位
new_uart.c_cflag &= ~PARENB;
//1个停止位
new_uart.c_cflag &= ~CSTOPB;
//设置等待时间、最小接收字符个数
new_uart.c_cc[VTIME] = 0;
new_uart.c_cc[VMIN] = 1;
new_uart.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); //本地模式设置为原始模式
//清空缓冲区
tcflush(fd,TCIOFLUSH);
//设置串口属性到文件中 -- 生效属性
tcsetattr(fd, TCSANOW,&new_uart);
return 0;
}
void *BLE_Send(void *arg)
{
int ble_fd = *(int *)arg; //获取文件描述符
char *s_msg = (char *)malloc(1024); //申请写入数据的空间
while(1)
{
printf("send:");
//从键盘输入数据保存到msg中
fgets(s_msg,1024,stdin);
write(ble_fd,s_msg,strlen(s_msg)); //写数据
if(strncmp(s_msg,"quit",4)==0)
{
memset(s_msg,0,1024);
break;
}
//清空内存
memset(s_msg,0,1024);
}
//释放堆空间
free(s_msg);
}
void *BLE_Recv(void *arg)
{
int ble_fd = *(int *)arg; //获取文件描述符
char *r_msg = (char *)malloc(1024); //申请接收数据的空间
while(1)
{
//读取串口接收的数据
read(ble_fd,r_msg,1024);
printf("recv:%s\n",r_msg);
if(strncmp(r_msg,"quit",4)==0)
{
memset(r_msg,0,1024);
break;
}
//清空内存
memset(r_msg,0,1024);
}
//释放堆空间
free(r_msg);
}
int main(int argc,char *argv[])
{
pthread_t ble_tid1=0,ble_tid2=0;
//访问串口1驱动
int ble_fd = open("/dev/ttySAC1",O_RDWR);
if(ble_fd==-1)
{
printf("open BLE error...\n");
return -1;
}
//串口初始化
tty_init(ble_fd);
//串口数据读写线程
pthread_create(&ble_tid1,NULL,BLE_Send,(void *)&ble_fd);
pthread_create(&ble_tid2,NULL,BLE_Recv,(void *)&ble_fd);
//接合线程
pthread_join(ble_tid1,NULL);
pthread_join(ble_tid2,NULL);
//关闭文件
close(ble_fd);
return 0;
}#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <termios.h>
#include <pthread.h>
//串口初始化功能函数,fd:串口驱动设备的文件描述符
int tty_init(int fd)
{
//串口参数结构体
struct termios old_uart,new_uart;
//清空结构体变量内容,memset
bzero(&old_uart,sizeof(struct termios));
bzero(&new_uart,sizeof(struct termios));
//获取串口属性,旧的串口
tcgetattr(fd,&old_uart);
//设置原始属性,重新设置属性
cfmakeraw(&new_uart);
//激活本地连接CLOCAL与接收使能CREAD的选项
new_uart.c_cflag |= CLOCAL|CREAD;
//设置输出、输入波特率
cfsetospeed(&new_uart, B115200);
cfsetispeed(&new_uart, B115200);
//设置数据位为8位
new_uart.c_cflag &= ~CSIZE;
new_uart.c_cflag |= CS8;
//无校验位
new_uart.c_cflag &= ~PARENB;
//1个停止位
new_uart.c_cflag &= ~CSTOPB;
//设置等待时间、最小接收字符个数
new_uart.c_cc[VTIME] = 0;
new_uart.c_cc[VMIN] = 1;
new_uart.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); //本地模式设置为原始模式
//清空缓冲区
tcflush(fd,TCIOFLUSH);
//设置串口属性到文件中 -- 生效属性
tcsetattr(fd, TCSANOW,&new_uart);
return 0;
}
void *BLE_Send(void *arg)
{
int ble_fd = *(int *)arg; //获取文件描述符
char *s_msg = (char *)malloc(1024); //申请写入数据的空间
while(1)
{
printf("send:");
//从键盘输入数据保存到msg中
fgets(s_msg,1024,stdin);
write(ble_fd,s_msg,strlen(s_msg)); //写数据
if(strncmp(s_msg,"quit",4)==0)
{
memset(s_msg,0,1024);
break;
}
//清空内存
memset(s_msg,0,1024);
}
//释放堆空间
free(s_msg);
}
void *BLE_Recv(void *arg)
{
int ble_fd = *(int *)arg; //获取文件描述符
char *r_msg = (char *)malloc(1024); //申请接收数据的空间
while(1)
{
//读取串口接收的数据
read(ble_fd,r_msg,1024);
printf("recv:%s\n",r_msg);
if(strncmp(r_msg,"quit",4)==0)
{
memset(r_msg,0,1024);
break;
}
//清空内存
memset(r_msg,0,1024);
}
//释放堆空间
free(r_msg);
}
int main(int argc,char *argv[])
{
pthread_t ble_tid1=0,ble_tid2=0;
//访问串口1驱动
int ble_fd = open("/dev/ttySAC1",O_RDWR);
if(ble_fd==-1)
{
printf("open BLE error...\n");
return -1;
}
//串口初始化
tty_init(ble_fd);
//串口数据读写线程
pthread_create(&ble_tid1,NULL,BLE_Send,(void *)&ble_fd);
pthread_create(&ble_tid2,NULL,BLE_Recv,(void *)&ble_fd);
//接合线程
pthread_join(ble_tid1,NULL);
pthread_join(ble_tid2,NULL);
//关闭文件
close(ble_fd);
return 0;
}#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <termios.h>
#include <pthread.h>
//串口初始化功能函数,fd:串口驱动设备的文件描述符
int tty_init(int fd)
{
//串口参数结构体
struct termios old_uart,new_uart;
//清空结构体变量内容,memset
bzero(&old_uart,sizeof(struct termios));
bzero(&new_uart,sizeof(struct termios));
//获取串口属性,旧的串口
tcgetattr(fd,&old_uart);
//设置原始属性,重新设置属性
cfmakeraw(&new_uart);
//激活本地连接CLOCAL与接收使能CREAD的选项
new_uart.c_cflag |= CLOCAL|CREAD;
//设置输出、输入波特率
cfsetospeed(&new_uart, B115200);
cfsetispeed(&new_uart, B115200);
//设置数据位为8位
new_uart.c_cflag &= ~CSIZE;
new_uart.c_cflag |= CS8;
//无校验位
new_uart.c_cflag &= ~PARENB;
//1个停止位
new_uart.c_cflag &= ~CSTOPB;
//设置等待时间、最小接收字符个数
new_uart.c_cc[VTIME] = 0;
new_uart.c_cc[VMIN] = 1;
new_uart.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); //本地模式设置为原始模式
//清空缓冲区
tcflush(fd,TCIOFLUSH);
//设置串口属性到文件中 -- 生效属性
tcsetattr(fd, TCSANOW,&new_uart);
return 0;
}
void *BLE_Send(void *arg)
{
int ble_fd = *(int *)arg; //获取文件描述符
char *s_msg = (char *)malloc(1024); //申请写入数据的空间
while(1)
{
printf("send:");
//从键盘输入数据保存到msg中
fgets(s_msg,1024,stdin);
write(ble_fd,s_msg,strlen(s_msg)); //写数据
if(strncmp(s_msg,"quit",4)==0)
{
memset(s_msg,0,1024);
break;
}
//清空内存
memset(s_msg,0,1024);
}
//释放堆空间
free(s_msg);
}
void *BLE_Recv(void *arg)
{
int ble_fd = *(int *)arg; //获取文件描述符
char *r_msg = (char *)malloc(1024); //申请接收数据的空间
while(1)
{
//读取串口接收的数据
read(ble_fd,r_msg,1024);
printf("recv:%s\n",r_msg);
if(strncmp(r_msg,"quit",4)==0)
{
memset(r_msg,0,1024);
break;
}
//清空内存
memset(r_msg,0,1024);
}
//释放堆空间
free(r_msg);
}
int main(int argc,char *argv[])
{
pthread_t ble_tid1=0,ble_tid2=0;
//访问串口1驱动
int ble_fd = open("/dev/ttySAC1",O_RDWR);
if(ble_fd==-1)
{
printf("open BLE error...\n");
return -1;
}
//串口初始化
tty_init(ble_fd);
//串口数据读写线程
pthread_create(&ble_tid1,NULL,BLE_Send,(void *)&ble_fd);
pthread_create(&ble_tid2,NULL,BLE_Recv,(void *)&ble_fd);
//接合线程
pthread_join(ble_tid1,NULL);
pthread_join(ble_tid2,NULL);
//关闭文件
close(ble_fd);
return 0;
}练习:使用蓝牙通信,手机发送“prev”显示上一张图片,发送"next"显示下一张图片
最新发布