Example #1
0
int main(void)
{
  
	uint32_t JumpAddress = 0;
	
	SysTick_Init();

	memcpy((uint8*)&tag_info.net_flag_set,  (void*)STORE_SYS_INFO_PAGE_ADDR, sizeof(tag_flash_info_t));
#ifdef QRCODE
	/*check if qrcode can be gernerate*/
	if(tag_info.qr_set_flag == SYS_PARA_MAGIC_NUM && tag_info.qr_crc != cal_crc16(&tag_info.qrcode[0], 63))
	{
		if (((*(__IO uint32_t*)APP_ERCODE_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
    { 
      /* Jump to user application */
      JumpAddress = *(__IO uint32_t*) (APP_ERCODE_ADDRESS + 4);
      Jump_To_Application = (pFunction) JumpAddress;
      
      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t*) APP_ERCODE_ADDRESS);
      
      /* Jump to application */
      Jump_To_Application();
    }
  }
#endif
	
	/*check if soft update flag is set*/
	if(SYS_PARA_MAGIC_NUM == tag_info.update_software_flag)
	{
		if(tag_info.software_crc == cal_crc16((uint8*)APP_ERCODE_ADDRESS, 0x400*29))
		{
		 if(1 == program_move(tag_info.software_crc))
		 {
				while(1)
				{
					//error update
				}
		 }
		}
	}
	
	if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
    { 
      /* Jump to user application */
      JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
      Jump_To_Application = (pFunction) JumpAddress;
      
      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
      
      /* Jump to application */
      Jump_To_Application();
    }
		
}
Example #2
0
uint8 program_move(uint16 crc)
{ uint16 app_crc;
	uint16 cmp = 2;
	int t = 0;
	uint32_t addr_src = APP_ERCODE_ADDRESS;
	uint32_t addr_dst = APPLICATION_ADDRESS;
	
  FLASH_If_Init();
	FLASH_If_Erase(APP_ERCODE_ADDRESS);
	FLASH_If_Write((__IO uint32_t* )&addr_dst, (uint32_t*)addr_src ,(0x400/4*29));
	FLASH_Lock();
	app_crc = cal_crc16((uint8*)APPLICATION_ADDRESS, 0x400*29);
	if(crc == app_crc) return 0;
	return 1;
}
Example #3
0
static int st_hub_ymodem_crc_check(struct st_hub_data *hdata,
					u8 *packet_data, size_t packet_size)
{
	int err;
	u8 data;
	u16 temp_crc;

	temp_crc = cal_crc16(packet_data, packet_size);

	data = temp_crc >> 8;
	err = hdata->tf->write_rl(hdata->dev, 1, &data);
	if (err < 0)
		return err;

	data = temp_crc & 0xff;
	err = hdata->tf->write_rl(hdata->dev, 1, &data);
	if (err < 0)
		return err;

	msleep(ST_HUB_YMODEM_SLEEP_MS);

	return 0;
}