loadBasicPacket.c 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. //-------------------------------------------------------------------------------
  2. #include "loadBasicPacket.h"
  3. //-------------------------------------------------------------------------------
  4. #include "generateSave.h"
  5. #include "generateBin.h"
  6. #include "generateOutput.h"
  7. //-------------------------------------------------------------------------------
  8. bool isLoadBasicPacket( void )
  9. {
  10. return (strlen( miBaseImageName ) != 0);
  11. }
  12. //-------------------------------------------------------------------------------
  13. void freeBasicPacket( void )
  14. {
  15. removeTempFile( BASEIMAGE_CODEBIN );
  16. removeTempFile( BASEIMAGE_SAVE );
  17. #if( CONFIG_DATA_FLASH_SIZE != 0 )
  18. removeTempFile( BASEIMAGE_DATABIN );
  19. #endif
  20. }
  21. static inline bool generateDecryptFlashBin( const char *tmp, const char *final )
  22. {
  23. dbgMsg( "[generateDecryptFlashBin]\n" );
  24. if( sisspi_encrypt( tmp, final, false ) )
  25. {
  26. errMsg( "decrypt failed\n"); return false;
  27. }
  28. removeTempFile( tmp );
  29. return true;
  30. }
  31. static inline bool outputFileContent( const char *targetName, FILE *fpIn, u32 cpySize )
  32. {
  33. FILE *fpOut; int readSize;
  34. u8 readBuf[TMP_BUFFER_SIZE] = {0};
  35. fpOut = fopen( targetName, "wb" );
  36. if( fpOut == NULL )
  37. {
  38. errMsg( "File (%s) can not create\n", targetName );
  39. return false;
  40. }
  41. while( (!feof( fpIn)) && (cpySize) )
  42. {
  43. readSize = fread( readBuf, 1, MIN(TMP_BUFFER_SIZE,cpySize), fpIn );
  44. if( readSize < 0 ) return true;
  45. fwrite( readBuf, 1, readSize, fpOut );
  46. cpySize -= readSize;
  47. }
  48. fclose( fpOut );
  49. return true;
  50. }
  51. bool separateBasicPacket()
  52. {
  53. if( !isLoadBasicPacket() ) return true;
  54. showMsg( "miBasicPacketImage: %s\n", miBaseImageName );
  55. bool ret = true;
  56. FILE *fpIn= fopen( miBaseImageName, "rb" );
  57. if( fpIn == NULL ) return false;
  58. if( ret ) ret = outputFileContent( BASEIMAGE_SAVE, fpIn, SAVEINFO_SIZE );
  59. if( ret ) ret = outputFileContent( BASEIMAGE_CODETMP, fpIn, CONFIG_CODE_FLASH_SIZE*1024 );
  60. if( ret ) ret = generateDecryptFlashBin( BASEIMAGE_CODETMP, BASEIMAGE_CODEBIN );
  61. #if( CONFIG_DATA_FLASH_SIZE != 0 )
  62. if( ret ) ret = outputFileContent( BASEIMAGE_DATATMP, fpIn, CONFIG_DATA_FLASH_SIZE*1024 );
  63. if( ret ) ret = generateDecryptFlashBin( BASEIMAGE_DATATMP, BASEIMAGE_DATABIN );
  64. #endif
  65. fclose( fpIn );
  66. return ret;
  67. }
  68. //-------------------------------------------------------------------------------
  69. bool loadBasicPacket()
  70. {
  71. if( !separateBasicPacket() ) return false;
  72. return true;
  73. }