RTno is communicating library and framework which allows you to make your embedded device capable of communicating with RT-middleware world. RT-middleware is a platform software to realize Robotic system. In RTM, robots are developed by constructing robotics technologies\' elements (components) named RT-component. Therefore, the RTno helps you to create your own RT-component with your mbed and arduino. To know how to use your RTno device, visit here: http://ysuga.net/robot_e/rtm_e/rtc_e/1065?lang=en To know about RT-middleware and RT-component, visit http://www.openrtm.org

Dependencies:   EthernetNetIf

Dependents:   RTnoV3_LED RTnoV3_Template RTnoV3_ADC RTnoV3_Timer ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers NullBuffer.cpp Source File

NullBuffer.cpp

00001 #include <stdint.h>
00002 #include "mbed.h"
00003 
00004 #include "NullBuffer.h"
00005 
00006 struct NullBuffer_private {
00007   int8_t *pData;
00008   uint8_t size;
00009   uint8_t isUpdated;
00010 };
00011 
00012 void NullBuffer_push(PortBuffer* _this, const int8_t* data, uint8_t size);
00013 void NullBuffer_pop(PortBuffer* _this, int8_t* dst, uint8_t size);
00014 uint8_t NullBuffer_getNextDataSize(PortBuffer* _this);
00015 uint8_t NullBuffer_hasNext(PortBuffer* _this);
00016 
00017 
00018 PortBuffer* NullBuffer_create() 
00019 {
00020   struct NullBuffer_private* privateData = 
00021     (struct NullBuffer_private*)malloc(sizeof(struct NullBuffer_private));
00022 
00023   privateData->pData = NULL;
00024   privateData->size = 0;
00025   privateData->isUpdated = 0;
00026   PortBuffer* retval = (PortBuffer*)malloc(sizeof(PortBuffer));
00027   retval->push = NullBuffer_push;
00028   retval->pop = NullBuffer_pop;
00029   retval->getNextDataSize = NullBuffer_getNextDataSize;
00030   retval->hasNext = NullBuffer_hasNext;
00031   retval->privateData = (void*)privateData;
00032   return retval;
00033 }
00034 
00035 void NullBuffer_destroy(PortBuffer* _this) {
00036   struct NullBuffer_private* nullBuffer = 
00037     (struct NullBuffer_private*)(_this->privateData);
00038   free(nullBuffer->pData);
00039   free(nullBuffer);
00040   free(_this);
00041 }
00042 
00043 void NullBuffer_push(PortBuffer* _this, const int8_t* data, uint8_t size) {
00044   struct NullBuffer_private* nullBuffer = 
00045     (struct NullBuffer_private*)(_this->privateData);
00046   if(size != nullBuffer->size) {
00047     free(nullBuffer->pData);
00048     nullBuffer->pData = (int8_t*)malloc(size);
00049     nullBuffer->size = size;
00050   }
00051   memcpy(nullBuffer->pData, data, size);
00052   nullBuffer->isUpdated = 1;
00053 }
00054 
00055 void NullBuffer_pop(PortBuffer* _this, int8_t* dst, uint8_t size)
00056 {
00057   struct NullBuffer_private* nullBuffer = 
00058     (struct NullBuffer_private*)(_this->privateData);
00059   if(nullBuffer->size <= size) {
00060     memcpy(dst, nullBuffer->pData, nullBuffer->size);
00061   }
00062   nullBuffer->isUpdated = 0;
00063 }
00064 
00065 uint8_t NullBuffer_getNextDataSize(PortBuffer* _this){
00066   return ((struct NullBuffer_private*)(_this->privateData))->size;
00067 }
00068 
00069 uint8_t NullBuffer_hasNext(PortBuffer* _this) {
00070   return ((struct NullBuffer_private*)(_this->privateData))->isUpdated;
00071 }
00072