| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #include "main.h"
- #include "flash.h"
- #include "string.h"
- static uint32_t my_addr = 0;
- g_MD_Data* get_md_data(Upgrade *upgrade)
- {
- return &(upgrade->md_data);
- }
- md_msg* get_md_msg(Upgrade *upgrade)
- {
- return &(upgrade->md_msg_head);
- }
- uint8_t operation_ide(Upgrade *upgrade)
- {
- uint8_t ret = FAILD;
- if(upgrade->get_head_sucess_flag) //get programe head
- {
- md_msg* msg = get_md_msg(upgrade);
- if(msg->patition == ONE)
- {
- upgrade->start_app_addr =PROGRAME_APP1;
- upgrade->erase_size = PROGRAME_APP1_SIZE;
- my_addr = upgrade->start_app_addr;
- ret = SUCEESS;
- }else if(msg->patition == SECOND)
- {
- upgrade->start_app_addr =PROGRAME_APP2;
- upgrade->erase_size = PROGRAME_APP2_SIZE;
- my_addr = upgrade->start_app_addr;
- ret = SUCEESS;
- }else{
- upgrade->get_head_sucess_flag = 0;
- }
- }
- return ret;
- }
- uint8_t operation_erase_programe(Upgrade *upgrade)
- {
- uint8_t ret = FAILD;
- if(upgrade->app_erase_flag == 0)
- {
- uint32_t temp_addr = upgrade -> start_app_addr;
- uint32_t erase_size = upgrade -> erase_size;
- flash_erase_programe(temp_addr,erase_size/PAGE_SIZE,PAGE_SIZE);
- upgrade->app_erase_flag = 1;
- ret = SUCEESS;
- }else
- {
- upgrade->get_head_sucess_flag = 0;
- }
- return ret;
- }
- void operation_pro_or_msg(Upgrade *upgrade,Flash_Data *data)
- {
-
- if(data->index == 0)
- {
- uint32_t lenth = strlen(MODBUS_HEAD);
- if(upgrade->md_status == UPGRADE_STATUS_IDE)
- {
- if((strncmp((const char *)(data->recive),MODBUS_HEAD,lenth)) == 0)
- {
- md_msg* _msg = get_md_msg(upgrade);
- memcpy(&_msg->magic,data->recive,lenth);
- _msg->size = (data->recive[lenth]) | (data->recive[lenth+1] << 8);
- _msg->patition = (data->recive[lenth+2]) | (data->recive[lenth+3] << 8) | (data->recive[lenth+4] << 16) | (data->recive[lenth+5] << 24);
- _msg->version = (data->recive[lenth+6]) | (data->recive[lenth+6] << 8) | (data->recive[lenth+8] << 16) | (data->recive[lenth+9] << 24);
- }
- }
- }else
- {
-
- if(upgrade->md_status == UPGRADE_STATUS_WRITE_PROGRAME)
- {
- //my_addr = upgrade->start_app_addr;
- my_addr = flash_write_programe(my_addr,data->recive,data->lenth);
- if(data->index < 0)
- {
- upgrade->app_write_sucessful_flag = 1;
- }
- }
- }
- }
- uint8_t operation_erase_meta(Upgrade *upgrade)
- {
- uint8_t ret = FAILD;
- md_msg* _msg = get_md_msg(upgrade);
- if(upgrade->meta_erase_flag == 0)
- {
- upgrade->meta.partition = _msg->patition;
- upgrade->meta.running_app_version = _msg->version;
- upgrade->meta.errno = 0;
- upgrade->meta.error_count = 0;
- if(upgrade->meta.partition == ONE){
- upgrade->meta.rom_addr =PROGRAME_APP1;
- upgrade->meta.app1_partition = _msg->patition;
- upgrade->meta.app1_rom_addr = PROGRAME_APP1;
- upgrade->meta.app1_version = _msg->version;
- }else if(upgrade->meta.partition == SECOND)
- {
- upgrade->meta.rom_addr =PROGRAME_APP2;
- upgrade->meta.app2_partition = _msg->patition;
- upgrade->meta.app2_rom_addr = PROGRAME_APP2;
- upgrade->meta.app2_version = _msg->version;
- }else {
- // errno
- upgrade->get_head_sucess_flag = 0;
- upgrade->app_write_sucessful_flag = 0;
- upgrade->app_erase_flag = 0;
- return ret;
- }
- upgrade->meta.operation_flag = 0;
- upgrade->meta.recent_running_time = 0;
- flash_erase_meta();
- upgrade->meta_erase_flag = 1;
- ret = SUCEESS;
- }
- return ret;
- }
- uint8_t operation_write_meta(Upgrade *upgrade)
- {
- uint8_t ret = FAILD;
- if(upgrade->meta_write_sucesse_flag == 0)
- {
- flash_write_meta(&upgrade->meta);
- upgrade->meta_write_sucesse_flag = 1;
- ret = SUCEESS;
- }
- return ret;
- }
|