17int processDataPacket(uint8_t* packet_data,
int packet_length, fs::File& ffd,
unsigned int file_size,
unsigned int* errors)
19 static unsigned int file_len = 0;
21 if (file_len < file_size) {
22 unsigned int write_len = packet_length;
23 file_len += packet_length;
24 if (file_len > file_size) {
25 write_len -= (file_len - file_size);
29 int written_bytes = ffd.write(packet_data +
PACKET_HEADER, write_len);
30 if (written_bytes != write_len) {
42 static int eof_cnt = 0;
62 while ((*file_ptr != 0) && (i < 64)) {
63 *getname = *file_ptr++;
71 while ((*file_ptr != 0) && (file_ptr < packet_data +
PACKET_1K_SIZE)) {
78 while ((*file_ptr !=
' ') && (i <
sizeof(file_size) - 1)) {
79 file_size[i++] = *file_ptr++;
84 if (strlen(file_size) > 0) {
85 *size = strtol(file_size, NULL, 10);
92int processHeaderPacket(uint8_t* packet_data,
int packet_length,
unsigned int maxsize,
char* getname,
int* size,
unsigned int* errors)
96 if (*size < 1 || *size > maxsize) {
98 return (*size > maxsize) ? -9 : -4;
114int processPacket(uint8_t* packet_data,
int packet_length, fs::File& ffd,
unsigned int maxsize,
char* getname,
unsigned int packets_received,
115 int* size,
unsigned int* file_done,
unsigned int* errors)
117 if (packet_length == 0) {
121 else if (packet_length == -1) {
125 else if (packet_length == -2) {
136 if (packets_received == 0) {
144int handleFileSession(fs::File& ffd,
unsigned int maxsize,
char* getname,
unsigned int* session_done,
unsigned int* errors)
146 unsigned int file_done = 0, packets_received = 0;
151 int packet_length = 0;
156 int process_result =
processPacket(packet_data, packet_length, ffd, maxsize, getname, packets_received, &size, &file_done, errors);
157 if (process_result < 0) {
158 return process_result;
162 else if (result == -2) {
void handleEOFPacket(unsigned int *file_done, unsigned int *errors)
Handles the End Of File (EOF) packet in the Ymodem protocol.
int processHeaderPacket(uint8_t *packet_data, int packet_length, unsigned int maxsize, char *getname, int *size, unsigned int *errors)
Processes the header packet of a Ymodem transfer.
int processPacket(uint8_t *packet_data, int packet_length, fs::File &ffd, unsigned int maxsize, char *getname, unsigned int packets_received, int *size, unsigned int *file_done, unsigned int *errors)
Processes a received Ymodem packet.
int processDataPacket(uint8_t *packet_data, int packet_length, fs::File &ffd, unsigned int file_size, unsigned int *errors)
Processes a data packet received via Ymodem protocol.
int handleFileSession(fs::File &ffd, unsigned int maxsize, char *getname, unsigned int *session_done, unsigned int *errors)
Handles a file session for receiving data.
void extractFileInfo(uint8_t *packet_data, char *getname, int *size)
Extracts file information from a Ymodem packet.
Ymodem Packet reception functions.
void IRAM_ATTR LED_toggle()
Toggles the state of an LED.
void send_CRC16()
Sends the CRC16 checksum.
void send_ACKCRC16()
Sends an acknowledgment with CRC16.
int32_t Receive_Packet(uint8_t *data, int *length, uint32_t timeout)
Receives a packet of data.
void send_CA()
Sends the CA (Cancel) signal.
void send_ACK()
Sends an acknowledgment (ACK) signal.
void send_NAK()
Sends a Negative Acknowledgement (NAK) signal.