diff --git "a/X&YMODEM-\345\215\217\350\256\256\346\272\220\344\273\243\347\240\201\346\226\207\344\273\266/ymodem/ymodem.c" "b/X&YMODEM-\345\215\217\350\256\256\346\272\220\344\273\243\347\240\201\346\226\207\344\273\266/ymodem/ymodem.c" index 51c6ac36df6f2a8d1573c6196892d9b069409fc9..6cb29a9f6d05a46307d18131926a16e171e8e7b4 100644 --- "a/X&YMODEM-\345\215\217\350\256\256\346\272\220\344\273\243\347\240\201\346\226\207\344\273\266/ymodem/ymodem.c" +++ "b/X&YMODEM-\345\215\217\350\256\256\346\272\220\344\273\243\347\240\201\346\226\207\344\273\266/ymodem/ymodem.c" @@ -4,22 +4,22 @@ * @author long * @version V1.0 * @date 2020-xx-xx - * @brief ymodem-1k 协议 + * @brief ymodem-1k 鍗忚 ****************************************************************************** ***/ #include "./ymodem/ymodem.h" #include -/* 全局变量. */ -static y_uint8_t recv_buf[Y_PROT_FRAME_LEN_RECV]; /* 接收数据缓冲区 */ -static y_uint32_t recv_len; /* 接收到数据的长度 */ -static y_uint8_t ymodem_packet_number = 0u; /* 包计数. */ -static y_uint16_t ymodem_file_number = 0u; /* 文件计数. */ -static y_uint8_t y_first_packet_received = Y_IS_PACKET; /* 是不是包头. */ +/* 鍏ㄥ眬鍙橀噺. */ +static y_uint8_t recv_buf[Y_PROT_FRAME_LEN_RECV]; /* 鎺ユ敹鏁版嵁缂撳啿鍖 */ +static y_uint32_t recv_len; /* 鎺ユ敹鍒版暟鎹殑闀垮害 */ +static y_uint8_t ymodem_packet_number = 0u; /* 鍖呰鏁. */ +static y_uint16_t ymodem_file_number = 0u; /* 鏂囦欢璁℃暟. */ +static y_uint8_t y_first_packet_received = Y_IS_PACKET; /* 鏄笉鏄寘澶. */ static void *file_ptr = 0; -/* 局部函数. */ +/* 灞閮ㄥ嚱鏁. */ static y_uint16_t ymodem_calc_crc(y_uint8_t *data, y_uint16_t length); static ymodem_status ymodem_handle_packet(y_uint8_t *header); static ymodem_status ymodem_error_handler(y_uint8_t *error_number, y_uint8_t max_error_number); @@ -30,58 +30,58 @@ static void reset_recv_len(void); static y_uint32_t get_recv_len(void); /** - * @brief 这个函数是Ymodem协议的基础. - * 接收数据并处理数据. - * @param rec_num:需要接收的文件数量 - * @return 返回接收到的文件数量,如果最高位是1则说明接收异常,否则正常 + * @brief 杩欎釜鍑芥暟鏄痀modem鍗忚鐨勫熀纭. + * 鎺ユ敹鏁版嵁骞跺鐞嗘暟鎹. + * @param rec_num:闇瑕佹帴鏀剁殑鏂囦欢鏁伴噺 + * @return 杩斿洖鎺ユ敹鍒扮殑鏂囦欢鏁伴噺锛屽鏋滄渶楂樹綅鏄1鍒欒鏄庢帴鏀跺紓甯革紝鍚﹀垯姝e父 */ y_uint16_t ymodem_receive(void) { volatile ymodem_status status = Y_OK; y_uint8_t error_number = 0u; - y_uint8_t eot_num = 0; /* 收到 EOT 的次数 */ + y_uint8_t eot_num = 0; /* 鏀跺埌 EOT 鐨勬鏁 */ y_first_packet_received = Y_NO_PACKET; ymodem_packet_number = 0u; ymodem_file_number = 0u; - reset_recv_len(); // 清空接收缓冲区(防止在这之前有接收到垃圾数据) + reset_recv_len(); // 娓呯┖鎺ユ敹缂撳啿鍖猴紙闃叉鍦ㄨ繖涔嬪墠鏈夋帴鏀跺埌鍨冨溇鏁版嵁锛 - (void)y_transmit_ch(Y_C); // 给上位机返回 ACSII "C" ,告诉上位机将使用 CRC-16 + (void)y_transmit_ch(Y_C); // 缁欎笂浣嶆満杩斿洖 ACSII "C" 锛屽憡璇変笂浣嶆満灏嗕娇鐢 CRC-16 - /* 循环,直到没有任何错误(或者或者所有文件接收完成). */ + /* 寰幆锛岀洿鍒版病鏈変换浣曢敊璇(鎴栬呮垨鑰呮墍鏈夋枃浠舵帴鏀跺畬鎴). */ while (Y_OK == status) { y_uint8_t *header = 0x00u; - /* 获取数据头. */ + /* 鑾峰彇鏁版嵁澶. */ int receive_status = get_receive_data(&header, 1u); - /* 用ACSII "C"发送给上位机(直到我们收到一些东西), 告诉上位机我们要使用 CRC-16 . */ + /* 鐢ˋCSII "C"鍙戦佺粰涓婁綅鏈(鐩村埌鎴戜滑鏀跺埌涓浜涗笢瑗), 鍛婅瘔涓婁綅鏈烘垜浠浣跨敤 CRC-16 . */ if (0 != receive_status) { if (Y_NO_PACKET == y_first_packet_received) { - (void)y_transmit_ch(Y_C); // 给上位机返回 ACSII "C" ,告诉上位机将使用 CRC-16 + (void)y_transmit_ch(Y_C); // 缁欎笂浣嶆満杩斿洖 ACSII "C" 锛屽憡璇変笂浣嶆満灏嗕娇鐢 CRC-16 } else { status = ymodem_error_handler(&error_number, Y_MAY_ERRORS); } } - /* 超时或其他错误. */ + /* 瓒呮椂鎴栧叾浠栭敊璇. */ else { - /* 包头可以使: SOH, STX, EOT and CAN. */ + /* 鍖呭ご鍙互浣: SOH, STX, EOT and CAN. */ ymodem_status packet_status = Y_ERROR; switch(header[0]) { - /* 128或1024字节的数据. */ + /* 128鎴1024瀛楄妭鐨勬暟鎹. */ case Y_SOH: case Y_STX: - /* 数据处理 */ + /* 鏁版嵁澶勭悊 */ packet_status = ymodem_handle_packet(header); - /* 如果处理成功,发送一个 ACK. */ + /* 濡傛灉澶勭悊鎴愬姛锛屽彂閫佷竴涓 ACK. */ if (Y_OK == packet_status) { (void)y_transmit_ch(Y_ACK); @@ -90,32 +90,32 @@ y_uint16_t ymodem_receive(void) y_transmit_ch(Y_C); } } - /* 如果错误与flash相关,则立即将错误计数器设置为最大值 (立即终止传输). */ + /* 濡傛灉閿欒涓巉lash鐩稿叧锛屽垯绔嬪嵆灏嗛敊璇鏁板櫒璁剧疆涓烘渶澶у (绔嬪嵆缁堟浼犺緭). */ else if (Y_ERROR_FLASH == packet_status) { error_number = Y_MAY_ERRORS; status = ymodem_error_handler(&error_number, Y_MAY_ERRORS); } - /* 所有文件接收完成. */ + /* 鎵鏈夋枃浠舵帴鏀跺畬鎴. */ else if (Y_EOY == packet_status) { (void)y_transmit_ch(Y_ACK); - return ymodem_file_number; // 文件接收正常,返回接收到的数里 + return ymodem_file_number; // 鏂囦欢鎺ユ敹姝e父,杩斿洖鎺ユ敹鍒扮殑鏁伴噷 } - /* 处理数据包时出错,要么发送一个 NAK,要么执行传输中止. */ + /* 澶勭悊鏁版嵁鍖呮椂鍑洪敊锛岃涔堝彂閫佷竴涓 NAK锛岃涔堟墽琛屼紶杈撲腑姝. */ else { status = ymodem_error_handler(&error_number, Y_MAY_ERRORS); } break; - /* 传输结束. */ + /* 浼犺緭缁撴潫. */ case Y_EOT: - /* ACK,反馈给上位机(以文本形式). */ + /* ACK锛屽弽棣堢粰涓婁綅鏈(浠ユ枃鏈舰寮). */ if (++eot_num > 1) { y_transmit_ch(Y_ACK); - /* 一个文件传输完成 */ + /* 涓涓枃浠朵紶杈撳畬鎴 */ y_first_packet_received = Y_NO_PACKET; ymodem_packet_number = 0; receive_file_callback(file_ptr); @@ -123,11 +123,11 @@ y_uint16_t ymodem_receive(void) eot_num = 0; ymodem_file_number++; - (void)y_transmit_ch(Y_C); // 给上位机返回 ACSII "C" ,开启下一次传输 + (void)y_transmit_ch(Y_C); // 缁欎笂浣嶆満杩斿洖 ACSII "C" 锛屽紑鍚笅涓娆′紶杈 } else { - y_transmit_ch(Y_NAK); /* 第一次收到EOT */ + y_transmit_ch(Y_NAK); /* 绗竴娆℃敹鍒癊OT */ } break; /* Abort from host. */ @@ -145,19 +145,19 @@ y_uint16_t ymodem_receive(void) } } - /* 复位 */ + /* 澶嶄綅 */ receive_file_callback(file_ptr); file_ptr = 0; ymodem_file_number |= (1 << 15); - return ymodem_file_number; // 文件接收出错,返回接收到的数里和错误信息 + return ymodem_file_number; // 鏂囦欢鎺ユ敹鍑洪敊,杩斿洖鎺ユ敹鍒扮殑鏁伴噷鍜岄敊璇俊鎭 } /** - * @brief 计算接收到包的 CRC-16. - * @param *data: 要计算的数据的数组. - * @param length: 数据的大小,128字节或1024字节. - * @return status: 计算CRC. + * @brief 璁$畻鎺ユ敹鍒板寘鐨 CRC-16. + * @param *data: 瑕佽绠楃殑鏁版嵁鐨勬暟缁. + * @param length: 鏁版嵁鐨勫ぇ灏忥紝128瀛楄妭鎴1024瀛楄妭. + * @return status: 璁$畻CRC. */ static y_uint16_t ymodem_calc_crc(y_uint8_t *data, y_uint16_t length) { @@ -182,9 +182,9 @@ static y_uint16_t ymodem_calc_crc(y_uint8_t *data, y_uint16_t length) } /** - * @brief 这个函数处理我们从ymodem协议中获得的数据包. - * @param header: SOH 或者 STX. - * @return status: 处理结果. + * @brief 杩欎釜鍑芥暟澶勭悊鎴戜滑浠巠modem鍗忚涓幏寰楃殑鏁版嵁鍖. + * @param header: SOH 鎴栬 STX. + * @return status: 澶勭悊缁撴灉. */ static ymodem_status ymodem_handle_packet(y_uint8_t *header) { @@ -203,88 +203,88 @@ static ymodem_status ymodem_handle_packet(y_uint8_t *header) } else { - /* 错误的类型. */ + /* 閿欒鐨勭被鍨. */ status = Y_ERROR; } y_uint16_t length = size + Y_PACKET_DATA_INDEX + Y_PACKET_CRC_SIZE; -#if 1 // 0:不拷贝可以加快传输速度,不过不建议这样做 +#if 1 // 0:涓嶆嫹璐濆彲浠ュ姞蹇紶杈撻熷害锛屼笉杩囦笉寤鸿杩欐牱鍋 y_uint8_t received_data[Y_PACKET_1024_SIZE + Y_PACKET_DATA_INDEX + Y_PACKET_CRC_SIZE]; memcpy(&received_data[0u], header, length); #else y_uint8_t *received_data = header; #endif - /* 接收数据. */ + /* 鎺ユ敹鏁版嵁. */ int receive_status = 0; - /* 错误处理或者写入 flash. */ + /* 閿欒澶勭悊鎴栬呭啓鍏 flash. */ if (Y_OK == status) { - #if 1 // 0:不校验可以加加快传输速度,不过不建议这样做 - /* 最后两个字节是来自主机的CRC. */ + #if 1 // 0:涓嶆牎楠屽彲浠ュ姞鍔犲揩浼犺緭閫熷害锛屼笉杩囦笉寤鸿杩欐牱鍋 + /* 鏈鍚庝袱涓瓧鑺傛槸鏉ヨ嚜涓绘満鐨凜RC. */ y_uint16_t crc_received = ((y_uint16_t)received_data[length-2u] << 8u) | ((y_uint16_t)received_data[length-1u]); - /* 校验. */ + /* 鏍¢獙. */ y_uint16_t crc_calculated = ymodem_calc_crc(&received_data[Y_PACKET_DATA_INDEX], size); if (crc_calculated != crc_received) { - /* 计算的CRC和接收的CRC不同. */ + /* 璁$畻鐨凜RC鍜屾帴鏀剁殑CRC涓嶅悓. */ status |= Y_ERROR_CRC; } #endif if (0 != receive_status) { - /* 传输错误. */ + /* 浼犺緭閿欒. */ status |= Y_ERROR_UART; } if (ymodem_packet_number != received_data[Y_PACKET_NUMBER_INDEX]) { - /* 包数量与计数器不匹配. */ + /* 鍖呮暟閲忎笌璁℃暟鍣ㄤ笉鍖归厤. */ status |= Y_ERROR_NUMBER; } if (255u != (received_data[Y_PACKET_NUMBER_INDEX] + received_data[Y_PACKET_NUMBER_COMPLEMENT_INDEX])) { - /* 包号和包号补数之和不是255. */ - /* 总和应该总是255. */ + /* 鍖呭彿鍜屽寘鍙疯ˉ鏁颁箣鍜屼笉鏄255. */ + /* 鎬诲拰搴旇鎬绘槸255. */ status |= Y_ERROR_NUMBER; } - if (received_data[Y_PACKET_NUMBER_INDEX] == 0x00 && y_first_packet_received == Y_NO_PACKET) // 第一个包 + if (received_data[Y_PACKET_NUMBER_INDEX] == 0x00 && y_first_packet_received == Y_NO_PACKET) // 绗竴涓寘 { strcpy(file_name, (char *)&received_data[Y_PACKET_DATA_INDEX]); if (strlen(file_name) == 0) { - /* 文件名字为空说明文件传输结束. */ + /* 鏂囦欢鍚嶅瓧涓虹┖璇存槑鏂囦欢浼犺緭缁撴潫. */ status |= Y_EOY; } else { file_len = get_file_len((y_uint8_t *)&received_data[Y_PACKET_DATA_INDEX]); - if (receive_nanme_size_callback(file_ptr, file_name, file_len) != 0) // 调用接收完成回调函数 + if (receive_nanme_size_callback(file_ptr, file_name, file_len) != 0) // 璋冪敤鎺ユ敹瀹屾垚鍥炶皟鍑芥暟 { - /* 硬件错误. */ + /* 纭欢閿欒. */ status |= Y_ERROR_FLASH; } } } else { - if (file_len == 0xFFFFFFFF) // 不是有效的长度 + if (file_len == 0xFFFFFFFF) // 涓嶆槸鏈夋晥鐨勯暱搴 { - /* file_len 不是有效的数值,判断数据是 0x1A 那么就丢弃数据 */ - size = get_active_length((y_uint8_t *)&received_data[Y_PACKET_DATA_INDEX], size); // 获取有效的长度 + /* file_len 涓嶆槸鏈夋晥鐨勬暟鍊硷紝鍒ゆ柇鏁版嵁鏄 0x1A 閭d箞灏变涪寮冩暟鎹 */ + size = get_active_length((y_uint8_t *)&received_data[Y_PACKET_DATA_INDEX], size); // 鑾峰彇鏈夋晥鐨勯暱搴 } - if (file_len < size) /* 最后一帧了,并且数据没有size这么大 */ + if (file_len < size) /* 鏈鍚庝竴甯т簡锛屽苟涓旀暟鎹病鏈塻ize杩欎箞澶 */ { size = file_len; } if (receive_file_data_callback(file_ptr, (char *)&received_data[Y_PACKET_DATA_INDEX], size) != 0) { - /* 硬件错误. */ + /* 纭欢閿欒. */ status |= Y_ERROR_FLASH; } @@ -293,12 +293,12 @@ static ymodem_status ymodem_handle_packet(y_uint8_t *header) file_len -= size; } - /* 标记接收到一个包. */ + /* 鏍囪鎺ユ敹鍒颁竴涓寘. */ y_first_packet_received = Y_IS_PACKET; } } - /* 增加包计数和地址,减少当前扇区的剩余数量 (如果没有任何错误的话). */ + /* 澧炲姞鍖呰鏁板拰鍦板潃锛屽噺灏戝綋鍓嶆墖鍖虹殑鍓╀綑鏁伴噺 (濡傛灉娌℃湁浠讳綍閿欒鐨勮瘽). */ if (Y_OK == status) { ymodem_packet_number++; @@ -308,29 +308,29 @@ static ymodem_status ymodem_handle_packet(y_uint8_t *header) } /** - * @brief 处理ymodem错误. - * 增加错误计数器,然后如果错误数量达到临界,则发送终止,否则发送一个 NAK. - * @param *error_number: 当前错误数(作为指针传递). - * @param max_error_number: 允许的最大错误数. - * @return status: Y_ERROR 达到错误数量上限, Y_OK 继续接受. + * @brief 澶勭悊ymodem閿欒. + * 澧炲姞閿欒璁℃暟鍣紝鐒跺悗濡傛灉閿欒鏁伴噺杈惧埌涓寸晫锛屽垯鍙戦佺粓姝紝鍚﹀垯鍙戦佷竴涓 NAK. + * @param *error_number: 褰撳墠閿欒鏁(浣滀负鎸囬拡浼犻). + * @param max_error_number: 鍏佽鐨勬渶澶ч敊璇暟. + * @return status: Y_ERROR 杈惧埌閿欒鏁伴噺涓婇檺, Y_OK 缁х画鎺ュ彈. */ static ymodem_status ymodem_error_handler(y_uint8_t *error_number, y_uint8_t max_error_number) { ymodem_status status = Y_OK; - reset_recv_len(); // 清空接收缓冲区 + reset_recv_len(); // 娓呯┖鎺ユ敹缂撳啿鍖 - /* 错误计数器自增. */ + /* 閿欒璁℃暟鍣ㄨ嚜澧. */ (*error_number)++; - /* 如果计数器达到最大值,则中止. */ + /* 濡傛灉璁℃暟鍣ㄨ揪鍒版渶澶у硷紝鍒欎腑姝. */ if ((*error_number) >= max_error_number) { - /* 终止传输. */ + /* 缁堟浼犺緭. */ (void)y_transmit_ch(Y_CAN); (void)y_transmit_ch(Y_CAN); status = Y_ERROR; } - /* 发送一个NAK进行重复. */ + /* 鍙戦佷竴涓狽AK杩涜閲嶅. */ else { (void)y_transmit_ch(Y_NAK); @@ -341,10 +341,10 @@ static ymodem_status ymodem_error_handler(y_uint8_t *error_number, y_uint8_t max } /** - * @brief 获取文件有效的长度(除去后面为0x1A的字节). - * @param *data: 指向数据的指针. - * @param len: 数据长度. - * @return 有效的数据长度. + * @brief 鑾峰彇鏂囦欢鏈夋晥鐨勯暱搴︼紙闄ゅ幓鍚庨潰涓0x1A鐨勫瓧鑺傦級. + * @param *data: 鎸囧悜鏁版嵁鐨勬寚閽. + * @param len: 鏁版嵁闀垮害. + * @return 鏈夋晥鐨勬暟鎹暱搴. */ static y_uint16_t get_active_length(y_uint8_t *data, y_uint16_t len) { @@ -364,10 +364,10 @@ static y_uint16_t get_active_length(y_uint8_t *data, y_uint16_t len) } /** - * @brief 获取文件长度. - * @param *data: 指向数据的指针. - * @param len: 数据长度. - * @return 找到则返回文件长度,否则返回0xFFFFFFFF. + * @brief 鑾峰彇鏂囦欢闀垮害. + * @param *data: 鎸囧悜鏁版嵁鐨勬寚閽. + * @param len: 鏁版嵁闀垮害. + * @return 鎵惧埌鍒欒繑鍥炴枃浠堕暱搴︼紝鍚﹀垯杩斿洖0xFFFFFFFF. */ static y_uint32_t get_file_len(y_uint8_t *data) { @@ -375,7 +375,7 @@ static y_uint32_t get_file_len(y_uint8_t *data) y_uint16_t count = 0; y_uint16_t index = 0; - /* 找文件大小的起始位置 */ + /* 鎵炬枃浠跺ぇ灏忕殑璧峰浣嶇疆 */ for (count=0; count<128; count++) { if (*(data + count) == '\0') @@ -388,7 +388,7 @@ static y_uint32_t get_file_len(y_uint8_t *data) if (count >= 128) return len; - /* 找文件大小的末位 */ + /* 鎵炬枃浠跺ぇ灏忕殑鏈綅 */ for (count=index; count<128; count++) { if (*(data + count) < 0x30 || *(data + count) > 0x39) @@ -401,7 +401,7 @@ static y_uint32_t get_file_len(y_uint8_t *data) return len; len = 0; - /* 转为数值 */ + /* 杞负鏁板 */ while(count > index) { len = *(data + index) - 0x30 + len * 10; @@ -412,10 +412,10 @@ static y_uint32_t get_file_len(y_uint8_t *data) } /** - * @brief Ymodem 接收数据的接口. - * @param *data :接收数据 - * @param *len :接收数据的长度 - * @return 接收数据的状态 + * @brief Ymodem 鎺ユ敹鏁版嵁鐨勬帴鍙. + * @param *data 锛氭帴鏀舵暟鎹 + * @param *len 锛氭帴鏀舵暟鎹殑闀垮害 + * @return 鎺ユ敹鏁版嵁鐨勭姸鎬 */ static int get_receive_data(y_uint8_t **data, y_uint32_t len) { @@ -425,17 +425,17 @@ static int get_receive_data(y_uint8_t **data, y_uint32_t len) y_uint16_t data_len[2] = {128, 1024}; #if TIMEOUT_CONFIG - while (timeout--) // 等待数据接收完成 + while (timeout--) // 绛夊緟鏁版嵁鎺ユ敹瀹屾垚 { if (get_recv_len() >= max_len) { if (max_len != 1) break; - data_temp = recv_buf; // 获取接收到的数据 - if (*data_temp == Y_SOH || *data_temp == Y_STX) // 第一个是SOH,说明本次需要接收133个字节 + data_temp = recv_buf; // 鑾峰彇鎺ユ敹鍒扮殑鏁版嵁 + if (*data_temp == Y_SOH || *data_temp == Y_STX) // 绗竴涓槸SOH锛岃鏄庢湰娆¢渶瑕佹帴鏀133涓瓧鑺 { - max_len = data_len[*data_temp - 1] + 3 + 2; // 根据不同的头记录不同的长度 + max_len = data_len[*data_temp - 1] + 3 + 2; // 鏍规嵁涓嶅悓鐨勫ご璁板綍涓嶅悓鐨勯暱搴 } else { @@ -445,16 +445,16 @@ static int get_receive_data(y_uint8_t **data, y_uint32_t len) if (timeout == 0) { - return -1; // 超时错误 + return -1; // 瓒呮椂閿欒 } } #else y_uint32_t tickstart = y_get_tick(); - while (1) // 等待数据接收完成 + while (1) // 绛夊緟鏁版嵁鎺ユ敹瀹屾垚 { - if (y_get_tick() - tickstart > timeout) // 检查是否超时 + if (y_get_tick() - tickstart > timeout) // 妫鏌ユ槸鍚﹁秴鏃 { - return -1; // 超时错误 + return -1; // 瓒呮椂閿欒 } if (get_recv_len() >= max_len) @@ -462,10 +462,10 @@ static int get_receive_data(y_uint8_t **data, y_uint32_t len) if (max_len != 1) break; - data_temp = recv_buf; // 获取接收到的数据 - if (*data_temp == Y_SOH || *data_temp == Y_STX) // 第一个是SOH,说明本次需要接收133个字节 + data_temp = recv_buf; // 鑾峰彇鎺ユ敹鍒扮殑鏁版嵁 + if (*data_temp == Y_SOH || *data_temp == Y_STX) // 绗竴涓槸SOH锛岃鏄庢湰娆¢渶瑕佹帴鏀133涓瓧鑺 { - max_len = data_len[*data_temp] + 3 + 2; // 根据不同的头记录不同的长度 + max_len = data_len[*data_temp - 1] + 3 + 2; // 鏍规嵁涓嶅悓鐨勫ご璁板綍涓嶅悓鐨勯暱搴 } else { @@ -475,7 +475,7 @@ static int get_receive_data(y_uint8_t **data, y_uint32_t len) } #endif - /* 获取接收数据 */ + /* 鑾峰彇鎺ユ敹鏁版嵁 */ *data = recv_buf; reset_recv_len(); @@ -483,7 +483,7 @@ static int get_receive_data(y_uint8_t **data, y_uint32_t len) } /** - * @brief 复位数据接收长度 + * @brief 澶嶄綅鏁版嵁鎺ユ敹闀垮害 * @param void. * @return void. */ @@ -493,9 +493,9 @@ static void reset_recv_len(void) } /** - * @brief 获取数据接收长度 + * @brief 鑾峰彇鏁版嵁鎺ユ敹闀垮害 * @param void. - * @return 接收到数据的长度. + * @return 鎺ユ敹鍒版暟鎹殑闀垮害. */ static y_uint32_t get_recv_len(void) { @@ -503,9 +503,9 @@ static y_uint32_t get_recv_len(void) } /** - * @brief 接收数据处理 - * @param *data: 要计算的数据的数组. - * @param data_len: 数据的大小 + * @brief 鎺ユ敹鏁版嵁澶勭悊 + * @param *data: 瑕佽绠楃殑鏁版嵁鐨勬暟缁. + * @param data_len: 鏁版嵁鐨勫ぇ灏 * @return void. */ void ymodem_data_recv(y_uint8_t *data, y_uint16_t data_len) @@ -518,9 +518,9 @@ void ymodem_data_recv(y_uint8_t *data, y_uint16_t data_len) } /** - * @brief 获取毫秒时间戳. + * @brief 鑾峰彇姣鏃堕棿鎴. * @param void - * @return 时间戳 + * @return 鏃堕棿鎴 */ __weak y_uint32_t y_get_tick(void) { @@ -530,9 +530,9 @@ __weak y_uint32_t y_get_tick(void) /** - * @brief Ymodem 发送一个字符的接口. - * @param ch :发送的数据 - * @return 返回发送状态 + * @brief Ymodem 鍙戦佷竴涓瓧绗︾殑鎺ュ彛. + * @param ch 锛氬彂閫佺殑鏁版嵁 + * @return 杩斿洖鍙戦佺姸鎬 */ __weak int y_transmit_ch(y_uint8_t ch) { @@ -542,11 +542,11 @@ __weak int y_transmit_ch(y_uint8_t ch) } /** - * @brief 文件名和大小接收完成回调. - * @param *ptr: 控制句柄. - * @param *file_name: 文件名字. - * @param file_size: 文件大小,若为0xFFFFFFFF,则说明大小无效. - * @return 返回写入的结果,0:成功,-1:失败. + * @brief 鏂囦欢鍚嶅拰澶у皬鎺ユ敹瀹屾垚鍥炶皟. + * @param *ptr: 鎺у埗鍙ユ焺. + * @param *file_name: 鏂囦欢鍚嶅瓧. + * @param file_size: 鏂囦欢澶у皬锛岃嫢涓0xFFFFFFFF锛屽垯璇存槑澶у皬鏃犳晥. + * @return 杩斿洖鍐欏叆鐨勭粨鏋滐紝0锛氭垚鍔燂紝-1锛氬け璐. */ __weak int receive_nanme_size_callback(void *ptr, char *file_name, y_uint32_t file_size) { @@ -554,16 +554,16 @@ __weak int receive_nanme_size_callback(void *ptr, char *file_name, y_uint32_t fi Y_UNUSED(file_name); Y_UNUSED(file_size); - /* 用户应该在外部实现这个函数 */ + /* 鐢ㄦ埛搴旇鍦ㄥ閮ㄥ疄鐜拌繖涓嚱鏁 */ return -1; } /** - * @brief 文件数据接收完成回调. - * @param *ptr: 控制句柄. - * @param *file_name: 文件名字. - * @param file_size: 文件大小,若为0xFFFFFFFF,则说明大小无效. - * @return 返回写入的结果,0:成功,-1:失败. + * @brief 鏂囦欢鏁版嵁鎺ユ敹瀹屾垚鍥炶皟. + * @param *ptr: 鎺у埗鍙ユ焺. + * @param *file_name: 鏂囦欢鍚嶅瓧. + * @param file_size: 鏂囦欢澶у皬锛岃嫢涓0xFFFFFFFF锛屽垯璇存槑澶у皬鏃犳晥. + * @return 杩斿洖鍐欏叆鐨勭粨鏋滐紝0锛氭垚鍔燂紝-1锛氬け璐. */ __weak int receive_file_data_callback(void *ptr, char *file_data, y_uint32_t w_size) { @@ -571,20 +571,20 @@ __weak int receive_file_data_callback(void *ptr, char *file_data, y_uint32_t w_s Y_UNUSED(file_data); Y_UNUSED(w_size); - /* 用户应该在外部实现这个函数 */ + /* 鐢ㄦ埛搴旇鍦ㄥ閮ㄥ疄鐜拌繖涓嚱鏁 */ return -1; } /** - * @brief 一个文件接收完成回调. - * @param *ptr: 控制句柄. - * @return 返回写入的结果,0:成功,-1:失败. + * @brief 涓涓枃浠舵帴鏀跺畬鎴愬洖璋. + * @param *ptr: 鎺у埗鍙ユ焺. + * @return 杩斿洖鍐欏叆鐨勭粨鏋滐紝0锛氭垚鍔燂紝-1锛氬け璐. */ __weak int receive_file_callback(void *ptr) { Y_UNUSED(ptr); - /* 用户应该在外部实现这个函数 */ + /* 鐢ㄦ埛搴旇鍦ㄥ閮ㄥ疄鐜拌繖涓嚱鏁 */ return -1; }