upgrade.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #include "main.h"
  2. #include "flash.h"
  3. #include "string.h"
  4. static uint32_t my_addr = 0;
  5. g_MD_Data* get_md_data(Upgrade *upgrade)
  6. {
  7. return &(upgrade->md_data);
  8. }
  9. md_msg* get_md_msg(Upgrade *upgrade)
  10. {
  11. return &(upgrade->md_msg_head);
  12. }
  13. uint8_t operation_ide(Upgrade *upgrade)
  14. {
  15. uint8_t ret = FAILD;
  16. if(upgrade->get_head_sucess_flag) //get programe head
  17. {
  18. md_msg* msg = get_md_msg(upgrade);
  19. if(msg->patition == ONE)
  20. {
  21. upgrade->start_app_addr =PROGRAME_APP1;
  22. upgrade->erase_size = PROGRAME_APP1_SIZE;
  23. my_addr = upgrade->start_app_addr;
  24. ret = SUCEESS;
  25. }else if(msg->patition == SECOND)
  26. {
  27. upgrade->start_app_addr =PROGRAME_APP2;
  28. upgrade->erase_size = PROGRAME_APP2_SIZE;
  29. my_addr = upgrade->start_app_addr;
  30. ret = SUCEESS;
  31. }else{
  32. upgrade->get_head_sucess_flag = 0;
  33. }
  34. }
  35. return ret;
  36. }
  37. uint8_t operation_erase_programe(Upgrade *upgrade)
  38. {
  39. uint8_t ret = FAILD;
  40. if(upgrade->app_erase_flag == 0)
  41. {
  42. uint32_t temp_addr = upgrade -> start_app_addr;
  43. uint32_t erase_size = upgrade -> erase_size;
  44. flash_erase_programe(temp_addr,erase_size/PAGE_SIZE,PAGE_SIZE);
  45. upgrade->app_erase_flag = 1;
  46. ret = SUCEESS;
  47. }else
  48. {
  49. upgrade->get_head_sucess_flag = 0;
  50. }
  51. return ret;
  52. }
  53. void operation_pro_or_msg(Upgrade *upgrade,Flash_Data *data)
  54. {
  55. if(data->index == 0)
  56. {
  57. uint32_t lenth = strlen(MODBUS_HEAD);
  58. if(upgrade->md_status == UPGRADE_STATUS_IDE)
  59. {
  60. if((strncmp((const char *)(data->recive),MODBUS_HEAD,lenth)) == 0)
  61. {
  62. md_msg* _msg = get_md_msg(upgrade);
  63. memcpy(&_msg->magic,data->recive,lenth);
  64. _msg->size = (data->recive[lenth]) | (data->recive[lenth+1] << 8);
  65. _msg->patition = (data->recive[lenth+2]) | (data->recive[lenth+3] << 8) | (data->recive[lenth+4] << 16) | (data->recive[lenth+5] << 24);
  66. _msg->version = (data->recive[lenth+6]) | (data->recive[lenth+6] << 8) | (data->recive[lenth+8] << 16) | (data->recive[lenth+9] << 24);
  67. }
  68. }
  69. }else
  70. {
  71. if(upgrade->md_status == UPGRADE_STATUS_WRITE_PROGRAME)
  72. {
  73. //my_addr = upgrade->start_app_addr;
  74. my_addr = flash_write_programe(my_addr,data->recive,data->lenth);
  75. if(data->index < 0)
  76. {
  77. upgrade->app_write_sucessful_flag = 1;
  78. }
  79. }
  80. }
  81. }
  82. uint8_t operation_erase_meta(Upgrade *upgrade)
  83. {
  84. uint8_t ret = FAILD;
  85. md_msg* _msg = get_md_msg(upgrade);
  86. if(upgrade->meta_erase_flag == 0)
  87. {
  88. upgrade->meta.partition = _msg->patition;
  89. upgrade->meta.running_app_version = _msg->version;
  90. upgrade->meta.errno = 0;
  91. upgrade->meta.error_count = 0;
  92. if(upgrade->meta.partition == ONE){
  93. upgrade->meta.rom_addr =PROGRAME_APP1;
  94. upgrade->meta.app1_partition = _msg->patition;
  95. upgrade->meta.app1_rom_addr = PROGRAME_APP1;
  96. upgrade->meta.app1_version = _msg->version;
  97. }else if(upgrade->meta.partition == SECOND)
  98. {
  99. upgrade->meta.rom_addr =PROGRAME_APP2;
  100. upgrade->meta.app2_partition = _msg->patition;
  101. upgrade->meta.app2_rom_addr = PROGRAME_APP2;
  102. upgrade->meta.app2_version = _msg->version;
  103. }else {
  104. // errno
  105. upgrade->get_head_sucess_flag = 0;
  106. upgrade->app_write_sucessful_flag = 0;
  107. upgrade->app_erase_flag = 0;
  108. return ret;
  109. }
  110. upgrade->meta.operation_flag = 0;
  111. upgrade->meta.recent_running_time = 0;
  112. flash_erase_meta();
  113. upgrade->meta_erase_flag = 1;
  114. ret = SUCEESS;
  115. }
  116. return ret;
  117. }
  118. uint8_t operation_write_meta(Upgrade *upgrade)
  119. {
  120. uint8_t ret = FAILD;
  121. if(upgrade->meta_write_sucesse_flag == 0)
  122. {
  123. flash_write_meta(&upgrade->meta);
  124. upgrade->meta_write_sucesse_flag = 1;
  125. ret = SUCEESS;
  126. }
  127. return ret;
  128. }