parent
664880e384
commit
c8aeab392d
@ -0,0 +1,16 @@
|
||||
CC = gcc
|
||||
CFLAGS = -Wall -Wextra
|
||||
|
||||
SRCS = uart_jpeg.c
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
|
||||
all: uart_jpeg
|
||||
|
||||
uart_jpeg: $(OBJS)
|
||||
$(CC) $(CFLAGS) -o $@ $^
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -c $<
|
||||
|
||||
clean:
|
||||
rm -f $(OBJS) uart_jpeg
|
@ -0,0 +1,121 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
int fd;
|
||||
unsigned char buffer[100000];
|
||||
unsigned char tempBuff[1];
|
||||
// Open the UART device
|
||||
fd = open("/dev/ttyACM0", O_RDWR | O_NOCTTY | O_NDELAY);
|
||||
if (fd == -1)
|
||||
{
|
||||
perror("Error opening UART device");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Configure the UART settings
|
||||
struct termios options;
|
||||
tcgetattr(fd, &options);
|
||||
cfsetispeed(&options, B115200);
|
||||
cfsetospeed(&options, B115200);
|
||||
options.c_cflag &= ~PARENB;
|
||||
options.c_cflag &= ~CSTOPB;
|
||||
options.c_cflag &= ~CSIZE;
|
||||
options.c_cflag |= CS8;
|
||||
tcsetattr(fd, TCSANOW, &options);
|
||||
|
||||
// Read a single byte from the UART device
|
||||
|
||||
int fileCount = 1;
|
||||
|
||||
while (1)
|
||||
{
|
||||
|
||||
if (read(fd, tempBuff, 1) != 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (tempBuff[0] != (unsigned char)255)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (read(fd, tempBuff, 1) != 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (tempBuff[0] != (unsigned char)216)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
unsigned int currentIndex = 2;
|
||||
buffer[0] = 255;
|
||||
buffer[1] = 216;
|
||||
while (1)
|
||||
{
|
||||
|
||||
if (read(fd, tempBuff, 1) != 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
buffer[currentIndex++] = tempBuff[0];
|
||||
if (tempBuff[0] != 0xFF)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (read(fd, tempBuff, 1) != 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
buffer[currentIndex++] = tempBuff[0];
|
||||
if (tempBuff[0] == 0xD8)
|
||||
{
|
||||
printf("Corrupted File, start over...\n");
|
||||
memset(buffer, 0x00, sizeof(buffer));
|
||||
currentIndex = 2;
|
||||
buffer[0] = 0xFF;
|
||||
buffer[1] = 0xD8;
|
||||
continue;
|
||||
}
|
||||
if (tempBuff[0] == 0xD9)
|
||||
{
|
||||
// END FOUND
|
||||
char fileName[11] = {'0', '0', '0', '0', '0', '.', 'j', 'p', 'e', 'g', '\0'};
|
||||
char secondDigit = (fileCount % 10) + '0';
|
||||
char firstDigit = (fileCount / 10) + '0';
|
||||
fileName[0] = firstDigit;
|
||||
fileName[1] = secondDigit;
|
||||
|
||||
FILE *fp = fopen(fileName, "wb");
|
||||
if (fp == NULL)
|
||||
{
|
||||
printf("Error opening file!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i < currentIndex; i++)
|
||||
{
|
||||
unsigned char myChar = buffer[i];
|
||||
fwrite(&myChar, sizeof(unsigned char), 1, fp);
|
||||
}
|
||||
|
||||
// Close the file
|
||||
fclose(fp);
|
||||
printf("File %s saved!\n", fileName);
|
||||
memset(buffer, 0x00, sizeof(buffer));
|
||||
fileCount++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Close the UART device
|
||||
close(fd);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in new issue