1st release (without comment)
Diff: RMS_UART.cpp
- Revision:
- 0:bc10ea82aec3
- Child:
- 1:5e6c5fbd48d6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RMS_UART.cpp Thu Sep 15 01:47:46 2016 +0000 @@ -0,0 +1,206 @@ +#include "mbed.h" +#include "RMS_UART.h" + +#ifdef EXT_SERIAL + Serial serial_device(SERIAL_TX, SERIAL_RX); +#else + Serial serial_device(SERIAL_TX, SERIAL_RX); +#endif + +char Msg_RxBuf[MSG_BUF_SIZE + 1]; // Reading Cmd Buffer +int Msg_index; // An Cmd index + +char Content_RxBuf[CONTENT_BUF_SIZE + 1]; // Reading Cmd Buffer +int Content_index; // An Cmd index + +char FileName[MSG2FILENAME]; + +bool MsgContentManagement = false; + +/** + * @brief + * @note + * @retval + */ +void Init_SerialDevice() +{ + serial_device.baud(BPS_9600); + serial_device.attach(&RxMsgInterruptCallback); +} + +/** + * @brief + * @note + * @retval + */ +void RxMsgInterruptCallback() +{ + /* Start Rx interrupt */ + if(MsgContentManagement == false) + { + DoTheMsgCmd(); + } + else + { + DoTheContent(); + } +} + +/** + * @brief + * @note + * @retval + */ +void DoTheContent() +{ + // Note: you need to actually read from the serial to clear the RX interrupt + Content_RxBuf[Content_index] = serial_device.getc(); + Content_index++; + + if(strstr(Content_RxBuf,"*end*")) + { + SendContentToFile(); + ClearContentIndexAndBuf(); + MsgContentManagement = false; + } + + if(Content_index == CONTENT_BUF_SIZE) + { + SendContentToFile(); + ClearContentIndexAndBuf(); + } +} + + /** + * @brief + * @note + * @retval + */ +void DoTheMsgCmd() +{ + + // Note: you need to actually read from the serial to clear the RX interrupt + Msg_RxBuf[Msg_index] = serial_device.getc(); + Msg_index++; + + if(strstr(Msg_RxBuf,"ls")) + { + GetListFileCmd(); + } + + if(strstr(Msg_RxBuf,".csv")) + { + CheckReadEditCmd(); + } + + if(strstr(Msg_RxBuf,".xml")) + { + CheckReadEditCmd(); + } + + if(strstr(Msg_RxBuf,".log")) + { + CheckReadEditCmd(); + } + + if(Msg_index >= 2) + { + if( !((strstr(Msg_RxBuf,"ls")) || (strstr(Msg_RxBuf,"rd")) || (strstr(Msg_RxBuf,"ed")))) + { + GetCmdError(); + } + } + + if(Msg_index == MSG_BUF_SIZE) + { + ClearCmdIndexAndBuf(); + } +} + +/** + * @brief + * @note + * @retval + */ +void GetListFileCmd() +{ + ClearCmdIndexAndBuf(); +} + +/** + * @brief + * @note + * @retval + */ +void CheckReadEditCmd() +{ + if(strstr(Msg_RxBuf,"rd")) + { + GetFileName(); + } + else if(strstr(Msg_RxBuf,"ed")) + { + GetFileName(); + MsgContentManagement = true; + } + else + { + GetCmdError(); + } +} + +/** + * @brief + * @note + * @retval + */ +void GetCmdError() +{ + serial_device.printf("$?? -- Command Error\n",Msg_RxBuf + 1); + ClearCmdIndexAndBuf(); +} + +/** + * @brief + * @note + * @retval + */ +void GetFileName() +{ + memcpy(FileName,&Msg_RxBuf[3],Msg_index - 3); + ClearCmdIndexAndBuf(); +} + +/** + * @brief + * @note + * @retval + */ +void SendContentToFile() +{ + MsgContentManagement = true; + serial_device.printf("Content -- %s \n",Content_RxBuf); + ClearContentIndexAndBuf(); +} + +/** + * @brief + * @note + * @retval + */ +void ClearCmdIndexAndBuf() +{ + Msg_index = 0; + memset(Msg_RxBuf,' ',MSG_BUF_SIZE); +} + +/** + * @brief + * @note + * @retval + */ +void ClearContentIndexAndBuf() +{ + Content_index = 0; + memset(Content_RxBuf,' ',CONTENT_BUF_SIZE); +}