stm32+i

来自「STM32烧写」· 代码 · 共 1,575 行 · 第 1/4 页

TXT
1,575
字号
					 arg_index++;
			     else 
					 break;

				 if(Is_Option(argv[arg_index])) 
					 break;

				 else if(Is_SubOption(argv[arg_index]))
				 {
					 if (arg_index< argc) 
						 arg_index++;
			         else 
						 break;

					 if (strcmp(argv[arg_index-1],"--get")==0) 
					 {
						 if (arg_index< argc) 
							 arg_index++;
			             else 
							 break;
                           
                         if (strcmp(argv[arg_index-1],"--fn")==0) 
					       filename = argv[arg_index];
						 
						 if(TARGET_GetSIFData(&User, &RDP, &Data0, &Data1, &WRP0, &WRP1, &WRP2, &WRP3) == SUCCESS)
						 {
						   write_debug_info("Getting Option bytes  data" ,0 ,0, 0, OK);

					       HANDLE Image;
						   if (FILES_CreateImage(&Image, 1) == FILES_NOERROR)
						   {
								IMAGEELEMENT Element={0};
								Element.dwAddress   = 0x1FFFF800;
								Element.dwDataLength = 16;
								Element.Data = (LPBYTE)malloc(Element.dwDataLength);

								{
									Element.Data[0]  = RDP;
									Element.Data[1]  = ~RDP;
									Element.Data[2]  = User;
									Element.Data[3]  = ~User;
									Element.Data[4]  = Data0;
									Element.Data[5]  = ~Data0;
									Element.Data[6]  = Data1;
									Element.Data[7]  = ~Data1;
									Element.Data[8]  = WRP0;
									Element.Data[9]  = ~WRP0;
									Element.Data[10] = WRP1;
									Element.Data[11] = ~WRP1;
									Element.Data[12] = WRP2;
									Element.Data[13] = ~WRP2;
									Element.Data[14] = WRP3;
									Element.Data[15] = ~WRP3;
								}

								FILES_SetImageElement(Image,0,TRUE,Element);
								if (FILES_ImageToFile((LPSTR)(LPCSTR)filename,Image) != FILES_NOERROR)
								{
								    write_debug_info("Saving Option bytes  data",0 ,0, 0, KO);
								}
								else  write_debug_info("Saving Option bytes  data",0 ,0, 0, OK); 
						   }
						 }
						 else write_debug_info("Getting Option bytes  data" ,0 ,0, 0, KO);
					 }
					 else if (strcmp(argv[arg_index-1],"--set")==0) 
					 {
						 if (arg_index< argc) arg_index++;
			             else break;
                           
                         if (strcmp(argv[arg_index-1],"--fn")==0) 
						 {
					           filename = argv[arg_index];

							   HANDLE OPBImage;

							   if(!FileExist((LPCTSTR)filename))
							   {
									  printf( "file does not exist %s \n", filename);
									  
									  if(COM_is_Open())  
										  COM_Close(); 
									  
									  printf("\n Press any key to continue ..."); 
									  getchar(); 
									  return 1;
							   }

							   if (FILES_ImageFromFile((LPSTR)(LPCSTR)filename, &OPBImage, 0) == FILES_NOERROR)
							   {
								   DWORD NbElements = 0;
								   if (FILES_GetImageNbElement(OPBImage, &NbElements) == FILES_NOERROR)
								   {
									   if ( NbElements == 1 )
									   {
										  IMAGEELEMENT Element={0};
										  if (FILES_GetImageElement(OPBImage, 0, &Element) == FILES_NOERROR)
										  {
											  Element.Data= (LPBYTE)malloc(Element.dwDataLength);
											  if (FILES_GetImageElement(OPBImage, 0, &Element) == FILES_NOERROR)
											  {
												  RDP   = Element.Data[0] ;
												  User  = Element.Data[2] ;
												  Data0 = Element.Data[4] ;
												  Data1 = Element.Data[6] ;
												  WRP0  = Element.Data[8] ;
												  WRP1  = Element.Data[10];
												  WRP2  = Element.Data[12];
												  WRP3  = Element.Data[14];

												  
												  if (TARGET_SetSIFData(User, RDP, Data0, Data1, WRP0, WRP1, WRP2, WRP3) == SUCCESS)
												  {
													  write_debug_info("Setting Option bytes  data" ,0 ,0, 0, OK);

													  if(COM_is_Open())  
														  COM_Close();

													  COM_Open();

													  if(STBL_Init_BL() != SUCCESS) 
														  write_debug_info("Resetting device" ,0 ,0, 0, KO);
													  else 
														  write_debug_info("Resetting device" ,0 ,0, 0, OK);
												  }
												  else 
													  write_debug_info("Setting Option bytes  data" ,0 ,0, 0, KO);
											  }
										  }
									   }
								   }
							   }
						 }
						 else if (strcmp(argv[arg_index-1],"--vals")==0) 
						 {
							   TARGET_GetSIFData(&User, &RDP, &Data0, &Data1, &WRP0, &WRP1, &WRP2, &WRP3);
                               
							   while(arg_index< argc)
							   {
								   if(Is_Option(argv[arg_index])) 
									   break;
				                   else if(Is_SubOption(argv[arg_index]))
								   {
									   arg_index++;
									   if(strcmp(argv[arg_index-1],"--RDP")==0)       { RDP   = _tcstoul(argv[arg_index], 0, 16);arg_index++;}
									   else if(strcmp(argv[arg_index-1],"--User")==0) { User  = _tcstoul(argv[arg_index], 0, 16);arg_index++;} 
									   else if(strcmp(argv[arg_index-1],"--data0")==0){ Data0 = _tcstoul(argv[arg_index], 0, 16);arg_index++;}
									   else if(strcmp(argv[arg_index-1],"--data1")==0){ Data1 = _tcstoul(argv[arg_index], 0, 16);arg_index++;} 
									   else if(strcmp(argv[arg_index-1],"--WRP0")==0) { WRP0  = _tcstoul(argv[arg_index], 0, 16);arg_index++;} 
									   else if(strcmp(argv[arg_index-1],"--WRP1")==0) { WRP1  = _tcstoul(argv[arg_index], 0, 16);arg_index++;}
									   else if(strcmp(argv[arg_index-1],"--WRP2")==0) { WRP2  = _tcstoul(argv[arg_index], 0, 16);arg_index++;}
									   else if(strcmp(argv[arg_index-1],"--WRP3")==0) { WRP3  = _tcstoul(argv[arg_index], 0, 16);arg_index++;}
								   }
							   }
                               if (TARGET_SetSIFData(User, RDP, Data0, Data1, WRP0, WRP1, WRP2, WRP3) != SUCCESS)
								   write_debug_info("Setting Option bytes  data" ,0 ,0, 0, KO);
							   else
							   {
								    write_debug_info("Setting Option bytes  data" ,0 ,0, 0, OK);

									if(COM_is_Open())  
										COM_Close();

									COM_Open();

									if(STBL_Init_BL() != SUCCESS) 
										write_debug_info("Resetting device" ,0 ,0, 0, KO);
									else 
										write_debug_info("Resetting device" ,0 ,0, 0, OK);
							   }
							   arg_index--;
						 }
					 }
				 }
				 else 
				 {
                     if (arg_index < argc - 1) 
						printf("bad parameter [%s] \n", argv[arg_index]);

					 if(COM_is_Open())  
						COM_Close(); 

					 printf("\n Press any key to continue ..."); 
				     getchar(); 
				     return 1;
				 }
			   }
			}
			//============================ Set/Unset R/W protection ==========================
			else if (strcmp(argv[arg_index],"-p")==0)
			{
				while(arg_index < argc)
				{
			     if (arg_index< argc-1) 
					 arg_index++;
			     else 
					 break;

				 if(Is_Option(argv[arg_index])) 
					 break;

				 else if(Is_SubOption(argv[arg_index]))
				 {
					 if (arg_index< argc) 
						 arg_index++;
			         else 
						 break;

					 if (strcmp(argv[arg_index-1],"--erp")==0) 
					 {
						 if(STBL_READOUT_PROTECT() != SUCCESS) 
							 write_debug_info( "enabling read protection", 0 , 0, 0, KO);
						 else 
							 write_debug_info( "enabling read protection", 0 , 0, 0, OK);
					
						 _sleep(TimeBO);

		                 if(STBL_Init_BL() != SUCCESS) 
							 write_debug_info( "reseting device", 0 , 0, 0, KO);
						 else 
							 write_debug_info( "reseting device", 0 , 0, 0, OK);

						 arg_index--;
					 }
					 else if (strcmp(argv[arg_index-1],"--drp")==0) 
					 {
						 if(STBL_READOUT_PERM_UNPROTECT() == SUCCESS) 
						 {
							 write_debug_info( "disabling read protection", 0 , 0, 0, OK);

							 _sleep(TimeBO);

		                     if(STBL_Init_BL() != SUCCESS) 
								 write_debug_info( "reseting device", 0 , 0, 0, KO);
						     else 
								 write_debug_info( "reseting device", 0 , 0, 0, OK);
						 }
						 else 
							 write_debug_info( "disabling read protection", 0 , 0, 0, KO);
						 
						 arg_index--;
					 }
					 else if (strcmp(argv[arg_index-1],"--ewp")==0) 
					 {
						 LPBYTE sectors;
						 if(Is_Option(argv[arg_index])) break;

						 nsec = atoi(argv[arg_index]);
						 sectors = (LPBYTE)malloc(nsec + 1);


					 	 sectors[0] = 0;
				 		 for(int i = 1; i<= nsec; i++)
						 {
								sectors[0]++;
								arg_index++;
								sectors[sectors[0]] = atoi(argv[arg_index]);
						 }


						 printf("\nenabling write protection %i sectors : ", sectors[0]);

#ifndef _VS6_USED
						int i;
#endif

						 for(i = 1; i<= nsec; i++)
						 {
							printf("<%i>", sectors[i]);
						 }
						 printf("\n");

						 if(STBL_WRITE_PROTECT(((LPBYTE)sectors)[0],&((LPBYTE)sectors)[1]) != SUCCESS) 
							 write_debug_info( "enabling write protection", 0 , 0, 0, KO);
						 else 
							 write_debug_info( "enabling write protection", 0 , 0, 0, OK);
						 
						 _sleep(TimeBO);

		                 if(STBL_Init_BL() != SUCCESS) 
							 write_debug_info( "reseting device", 0 , 0, 0, KO);
						 else 
							 write_debug_info( "reseting device", 0 , 0, 0, OK);
					 }
					 else if (strcmp(argv[arg_index-1],"--dwp")==0) 
					 {
						 if(STBL_WRITE_PERM_UNPROTECT() != SUCCESS) 
							 write_debug_info( "disabling write protection", 0 , 0, 0, KO);
						 else 
							 write_debug_info( "disabling write protection", 0 , 0, 0, OK);
						 
						 _sleep(TimeBO);

		                 if(STBL_Init_BL() != SUCCESS) 
							 write_debug_info( "reseting device", 0 , 0, 0, KO);
						 else 
							 write_debug_info( "reseting device", 0 , 0, 0, OK);
						 arg_index--;
					 }
				 }
				 else 
				 {
                     if (arg_index < argc - 1) 
						printf("bad parameter [%s] \n", argv[arg_index]);

					 if(COM_is_Open())  
						COM_Close(); 

					 printf("\n Press any key to continue ..."); 
				     getchar(); 
				     return 1;
				 }
			   }
			}
			//============================ Run at address ========================================
			else if (strcmp(argv[arg_index],"-r")==0)
			{
				while(arg_index < argc)
				{
			     if (arg_index< argc-1) 
					 arg_index++;
			     else 
					 break;

				 if(Is_Option(argv[arg_index])) 
					 break;

				 else if(Is_SubOption(argv[arg_index]))
				 {
					 if (arg_index< argc) 
						 arg_index++;
			         else 
						 break;

					 PMAPPINGSECTOR pSector = pMapping->pSectors;
				     address = pSector->dwStartAddress;

					 if (strcmp(argv[arg_index-1],"--a")==0)   
					 {
						 address = _tcstoul(argv[arg_index], 0, 16) ;
					 }
				 }
				 else 
				 {
                     if (arg_index < argc - 1) 
						printf("bad parameter [%s] \n", argv[arg_index]);

					 if(COM_is_Open())  
						COM_Close(); 

					 printf("\n Press any key to continue ..."); 
				     getchar(); 
				     return 1;
				 }

				 if (STBL_GO(address) == SUCCESS)
				 {
					 printf("Your code is running...\n");
				 }
				 else
				 {
					 printf( "run fails \n");
				 }
			   }
			}
			else
			{
				if (arg_index < argc - 1) 
						printf("bad parameter [%s] \n", argv[arg_index]);

				if(COM_is_Open())  
					COM_Close(); 

				printf("\n Press any key to continue ..."); 
				getchar(); 
				return 1;
			}
		}
	}

	// commented 
	/*printf("command executed succesfully, press any key to close the COM port and exit");
	getchar();*/

	if(COM_is_Open()) 
		COM_Close(); 

	return 0;
}


/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE******/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?