CMD0x50_Request_WriteProbeFactoryInfo.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "CommandsDefine.h"
  2. #include "ProjectConfig.h"
  3. #include "Probe_MSO7000X_2d5g.h"
  4. #include "AnalogChannelCtrl_2d5g_base.h"
  5. #include "ProbeEEPROM.h"
  6. #include "Helper.h"
  7. #include "string.h"
  8. //////////////////////////////////////////////////////////////////////////////
  9. // 2203/5/X GHz_ljw 合并版 厂家专用烧写EEPROM
  10. //////////////////////////////////////////////////////////////////////////////
  11. void CMD0x50_Request_WriteProbeFactoryInfo_process(u8 *pData,u16 dataLen,u8 bIsContentBitInverted_Recv,u8 bIsContentBitInverted_SendBack)
  12. {
  13. #ifdef RUNNING_WHERE_AT_BOOT
  14. Command_SendbackErrorMessage(Error0x02_CannotRunAtBoot);
  15. #else
  16. u8 bDataOK=1;
  17. u8 validDataLength=dataLen;
  18. if (bIsContentBitInverted_Recv)
  19. {
  20. validDataLength=dataLen/2;
  21. bDataOK=Helper_CheckInvertBytesIsRegist(pData,dataLen);
  22. }
  23. if (validDataLength<7)
  24. bDataOK=0;
  25. if(!bDataOK)
  26. {
  27. Command_SendbackErrorMessage(Error0x05_CMD_ParaLentghError,1);
  28. return;
  29. }
  30. if(IsChannelSetting!=0)
  31. {
  32. return;
  33. }
  34. IsChannelSetting = 1;
  35. u8 writeData[EEPROM_DATA_LEN+1];//careful!!!,EEPROM_DATA_LEN can't too big,check leap/stack size
  36. if(dataLen < EEPROM_DATA_LEN+1)
  37. {
  38. for(int i = 0;i<EEPROM_DATA_LEN-dataLen+1;i++)
  39. {
  40. writeData[dataLen+i] = 0xFF;
  41. }
  42. }
  43. memcpy(writeData,pData,dataLen);
  44. u8 result = ProbeEEPROM_Write(writeData,writeData+1);
  45. if(result==1)
  46. {
  47. Command_SendbackOKMessage();
  48. }
  49. else
  50. {
  51. Command_SendbackErrorMessage(Error0xFF_General,1);
  52. }
  53. IsChannelSetting = 0;
  54. #endif
  55. }