This is a SLIP interface for the STM32F446RE Nucleo Board. It is designed to work specifically with the esp-link software for the ESP8266. The program is an example of a rest command.
STMClientResponse.cpp
00001 #include "STMClientResponse.h" 00002 00003 STMClientResponse::STMClientResponse(STMClientPacket* packet) { 00004 _cmd = packet; 00005 _arg_ptr = _cmd->args; 00006 _arg_num = 0; 00007 } 00008 00009 STMClientResponse::STMClientResponse(void* packet) { 00010 _cmd = (STMClientPacket *)packet; 00011 _arg_ptr = _cmd->args; 00012 _arg_num = 0; 00013 } 00014 00015 int16_t STMClientResponse::popArgPtr(void **data) { 00016 if (_arg_num >= _cmd->argc) return -1; 00017 00018 uint16_t len = *(uint16_t*)_arg_ptr; 00019 uint16_t pad = (4-((len+2)&3))&3; // pad to next multiple of 4, including length 00020 _arg_ptr += 2; 00021 _arg_num++; 00022 00023 *data = _arg_ptr; 00024 _arg_ptr += len + pad; 00025 return len; 00026 } 00027 00028 int16_t STMClientResponse::popArg(void* d, uint16_t maxLen) { 00029 if (_arg_num >= _cmd->argc) return -1; 00030 00031 uint16_t len = *(uint16_t*)_arg_ptr; 00032 uint16_t pad = (4-((len+2)&3))&3; // pad to next multiple of 4, including length 00033 _arg_ptr += 2; 00034 _arg_num++; 00035 00036 uint8_t *data = (uint8_t *)d; 00037 uint16_t l = len > maxLen ? maxLen : len; 00038 uint8_t *p = _arg_ptr; 00039 while (l--) 00040 *data++ = *p++; 00041 00042 _arg_ptr += len + pad; 00043 return len; 00044 } 00045 00046 void STMClientResponse::popChar(char* buffer) { 00047 uint16_t len = *(uint16_t*)_arg_ptr; 00048 uint16_t pad = (4-((len+2)&3))&3; // pad to next multiple of 4, including length 00049 _arg_ptr += 2; 00050 _arg_num++; 00051 00052 uint8_t i; 00053 for (i = 0; i < len; i++) { 00054 buffer[i] = (char)*_arg_ptr++; 00055 } 00056 buffer[i] = '\0'; 00057 00058 _arg_ptr += pad; 00059 } 00060 00061 string STMClientResponse::popString() { 00062 string ret; 00063 uint16_t len = *(uint16_t*)_arg_ptr; 00064 uint16_t pad = (4-((len+2)&3))&3; // pad to next multiple of 4, including length 00065 _arg_ptr += 2; 00066 _arg_num++; 00067 00068 while (len--) 00069 ret += (char)*_arg_ptr++; 00070 00071 _arg_ptr += pad; 00072 return ret; 00073 } 00074 00075 void STMClientResponse::popString(string* data) { 00076 uint16_t len = *(uint16_t*)_arg_ptr; 00077 uint16_t pad = (4-((len+2)&3))&3; // pad to next multiple of 4, including length 00078 _arg_ptr += 2; 00079 _arg_num++; 00080 00081 while (len--) 00082 //string.append((char)*_arg_ptr++); 00083 //strcat (data,(char)*_arg_ptr++); 00084 data += (char)*_arg_ptr++; 00085 00086 _arg_ptr += pad; 00087 }
Generated on Thu Jul 14 2022 21:27:07 by 1.7.2