CommandsDefine.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include "CommandsDefine.h"
  2. #include "string.h"
  3. #include "usart.h"
  4. #include "Helper.h"
  5. u32 RecvedPackageCount=0;
  6. u32 SendBackPackageCount=0;
  7. u8 RegisteredMatserStartTime[BYTES_MASTER_STARTTIME]="2022-01-01 00:00:00";
  8. //////////////////////////////////////////////////////////////////////////////
  9. // 2203/8/X GHz_ljw 合并版
  10. //////////////////////////////////////////////////////////////////////////////
  11. //初始化命令
  12. //cmdLen命令总长度
  13. //cmdCode命令号
  14. //*pData:需要发送的数据,其长度应与dataLen匹配
  15. //dataLen数据长度,其大小应与pData大小匹配
  16. //resultBuffer:结果buffer
  17. int Command_FormatCmdBuffer(u8 cmdCode,u8 *pData,int dataLen,u8* resultBuffer)
  18. {
  19. resultBuffer[0] = PACKAGE_HEADER_BYTE1;
  20. resultBuffer[1] = PACKAGE_HEADER_BYTE2;
  21. resultBuffer[2] = PACKAGE_HEADER_BYTE3;
  22. resultBuffer[3] = cmdCode;
  23. resultBuffer[4] = (u8)((dataLen) & 0xFF);
  24. resultBuffer[5] = (u8)((dataLen) >> 8);
  25. if(dataLen>0)
  26. {
  27. memcpy(&resultBuffer[PACKAGE_HEAD_BYTES],pData,dataLen);
  28. }
  29. resultBuffer[PACKAGE_HEAD_BYTES+dataLen] = PACKAGE_TAIL_BYTE1;
  30. resultBuffer[PACKAGE_HEAD_BYTES+dataLen+1] = PACKAGE_TAIL_BYTE2;
  31. return (PACKAGE_HEAD_BYTES+dataLen+PACKAGE_TAIL_BYTES);
  32. }
  33. #define MaxBytesCurrPackage (2048+32)
  34. u8 currPackage[MaxBytesCurrPackage];
  35. void Command_ProcessRequestCmds(void)
  36. {
  37. Usart_Header* pUsart_Header;
  38. u16 loop_buffer_index=Usart_RecvedPackage[Usart_ProcessPackageIndex];
  39. if (loop_buffer_index==0xffff)
  40. goto Finished;
  41. Usart_RecvedPackage[Usart_ProcessPackageIndex]=0xffff;
  42. for(int i=0;i<MaxBytesCurrPackage;i++)
  43. {
  44. currPackage[i]=USART_RX_BUF[loop_buffer_index];
  45. loop_buffer_index=(loop_buffer_index+1) % USART_REC_LEN;
  46. }
  47. if (currPackage[0]!=0x55 || currPackage[1]!=0xaa || currPackage[2]!=0xbb)
  48. goto Finished;
  49. pUsart_Header=(Usart_Header*)&currPackage;
  50. if ((currPackage[pUsart_Header->packHeader.len+6]!=0x0d) || (currPackage[pUsart_Header->packHeader.len+6+1]!=0x0a))
  51. goto Finished;
  52. loop_buffer_index=Usart_RecvedPackage[Usart_ProcessPackageIndex];
  53. CmdPackageHeader *pCmdPackageHeader;
  54. pCmdPackageHeader=(CmdPackageHeader *)&currPackage[0];
  55. for(u8 cmdIndex=0;cmdIndex<INCLUDE_CMD_COUNT;cmdIndex++)
  56. {
  57. if (RequestCmdTables[cmdIndex].cmd==pCmdPackageHeader->Cmd)
  58. {
  59. RequestCmdTables[cmdIndex].Process(&currPackage[PACKAGE_HEAD_BYTES],pCmdPackageHeader->Bytes,RequestCmdTables[cmdIndex].bIsContentBitInverted_Recv,RequestCmdTables[cmdIndex].bIsContentBitInverted_SendBack_SendBack);
  60. break;
  61. }
  62. }
  63. Finished:
  64. Usart_ProcessPackageIndex=(Usart_ProcessPackageIndex+1) % 20;
  65. }
  66. void Command_SendbackOKMessage()
  67. {
  68. u8 dataBytes=2;
  69. USART_WR_BUF[0]=CMD0xC0_Request_CmdIsOK;
  70. USART_WR_BUF[1]=CMD0xC0_Request_CmdIsOK;
  71. USART6_Send(CMD0xC0_Request_CmdIsOK,dataBytes,1);
  72. }
  73. void Command_SendbackErrorMessage(u8 errorCode,u8 bIsContentBitInverted_SendBack)
  74. {
  75. u8 dataBytes=1;
  76. USART_WR_BUF[0]=errorCode;
  77. USART6_Send(CMD0xB0_Request_GetErrorCode,dataBytes,bIsContentBitInverted_SendBack);
  78. }
  79. void Command_SendbackAppStartTime()
  80. {
  81. //response!!!
  82. u8 dataBytes=BYTES_MASTER_STARTTIME;
  83. u8 bIsContentBitInverted_SendBack=1;
  84. memcpy(USART_WR_BUF,RegisteredMatserStartTime,dataBytes);
  85. USART6_Send(CMD0x07_Request_ReadbackAppStartTime,dataBytes,bIsContentBitInverted_SendBack);
  86. }