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.

Dependencies:   mbed DHT Matrix

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers STMClientResponse.cpp Source File

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 }