user_interface.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /**
  2. * @file user_interface.h
  3. * @author your name (you@domain.com)
  4. * @brief
  5. * @version 0.1
  6. * @date 2022-11-09
  7. *
  8. * @copyright Copyright (c) 2022
  9. *
  10. */
  11. #ifndef __USER_INTERFACE_H_
  12. #define __USER_INTERFACE_H_
  13. #include <stdint.h>
  14. #include <stdio.h>
  15. //#include "common_utils.h"
  16. #include "bs_type.h"
  17. #include "bspatch.h"
  18. #include "crc32.h"
  19. #define IH_NMLEN (32 - 4) /* Image Name Length */
  20. /* 差分包制作时自带的文件头信息,用户只需要关心中文注释的部分 */
  21. typedef struct image_header
  22. {
  23. uint32_t ih_magic; /* Image Header Magic Number */
  24. uint32_t ih_hcrc; /* Image Header CRC Checksum 差分包包头校验 */
  25. uint32_t ih_time; /* Image Creation Timestamp */
  26. uint32_t ih_size; /* Image Data Size 差分包的大小 */
  27. uint32_t ih_load; /* Data Load Address 上一版本旧文件的大小 */
  28. uint32_t ih_ep; /* Entry Point Address 要升级的新文件的大小 */
  29. uint32_t ih_dcrc; /* Image Data CRC Checksum 新文件的CRC */
  30. uint8_t ih_os; /* Operating System */
  31. uint8_t ih_arch; /* CPU architecture */
  32. uint8_t ih_type; /* Image Type */
  33. uint8_t ih_comp; /* Compression Type */
  34. uint8_t ih_name[IH_NMLEN]; /* Image Name */
  35. uint32_t ih_ocrc; /* Old Image Data CRC Checksum 上一版本旧文件的CRC */
  36. } image_header_t;
  37. /* 差分包制作时自带的文件头信息,用户只需要关心中文注释的部分 */
  38. /* 以下由用户实现 */
  39. #define bs_printf(...)
  40. // #define bs_printf(...) APP_PRINT( __VA_ARGS__)
  41. #define bs_malloc(...) pvPortMalloc(__VA_ARGS__)
  42. #define bs_free(...) vPortFree(__VA_ARGS__)
  43. /* 将差分文件写入用户的flash */
  44. extern int bs_flash_write(uint32_t addr, const void *p, uint32_t len);
  45. /**
  46. * @brief 用户使用差分升级时唯一需要关心的接口
  47. *
  48. * @param old 设备中执行区代码所在的地址,用户可指定flash执行区的地址,方便算法读出来当前
  49. * 运行中的代码
  50. * @param oldsize 设备中执行区代码的长度,用户可在差分包bin头获取
  51. * @param patch 设备中已经下载的差分包所在的flash地址,或者ram地址,只要能让算法读出来即可
  52. * 注意,下载的差分包自带image_header_t格式的文件头,真正的差分包需要偏
  53. * 移sizeof(image_header_t)的长度
  54. * @param patchsize 设备中已经下载的差分包的长度,用户可在差分包bin头获取
  55. * @param newfile 新文件的大小,用户需填入新版本bin的长度,用户亦可以差分包bin头获取
  56. * @return int 然后错误码,0成功,1失败
  57. */
  58. extern int iap_patch(const uint8_t* old, uint32_t oldsize, const uint8_t* patch,
  59. uint32_t patchsize, uint32_t newfile);
  60. #endif // !__USER_INTERFACE_H_