CMD0x0C_Request_UpdateSwitch.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "iap.h"
  2. #include "CommandsDefine.h"
  3. #include "ProjectConfig.h"
  4. #include "usart.h"
  5. #include "string.h"
  6. #include "Helper.h"
  7. /* 进行更新,传送更新代码
  8. 正确的响应:烧写传过来的代码
  9. 发送格式:
  10. 包起始标识
  11. +CMD0x06_Request_UpdateSend
  12. +[2字节的数据长度,=200或最后一帧的数据个数]
  13. +200字节的程序代码
  14. +包尾标识
  15. 返回:握手包。
  16. 包起始标识
  17. +CMD0xC0_Readback_CMDOK
  18. +[2字节的数据长度,=1]
  19. +CMD0x06_Request_UpdateSend
  20. +包尾标识
  21. 异常:如果程序在APP中,可能返回错误 Error0x01_CannotRunAtApp
  22. */
  23. void CMD0x0C_Request_UpdateSwitch_process(u8 *pData,u16 dataLen,u8 bIsContentBitInverted_Recv,u8 bIsContentBitInverted_SendBack)
  24. {
  25. #ifdef RUNNING_WHERE_AT_BOOT
  26. u8 responseResult=0;
  27. //Check point 1
  28. if(Updating==0)
  29. {
  30. responseResult=1;
  31. }
  32. //check point 2
  33. if ((responseResult==0) && (UpdateVerifyStage1OK==0))
  34. responseResult=1;
  35. if (responseResult==0)
  36. {
  37. u32 data;
  38. u32 u32Count=(UpdateRecvedContentBytes+sizeof(u32)-1)/sizeof(u32);
  39. for(int i=0;i<u32Count;i++)
  40. {
  41. data=(*(vu32*)(FLASH_ADDR_UPDATE_TEMP_AREA+i*sizeof(u32)));
  42. STMFLASH_Write((FLASH_ADDR_APP+i*sizeof(u32)),&data,1);
  43. }
  44. }
  45. //response!!!
  46. u8 dataBytes=1;
  47. USART_WR_BUF[0]=responseResult;
  48. USART6_Send(CMD0x0C_Request_UpdateSwitch,dataBytes,bIsContentBitInverted_SendBack);
  49. #else
  50. Command_SendbackErrorMessage(Error0x01_CannotRunAtApp,1);
  51. #endif
  52. }