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: EthernetInterface mbed-rtos
NullBuffer.cpp
- Committer:
- ysuga
- Date:
- 2013-08-29
- Revision:
- 7:6c7af1d50fb3
- Parent:
- 0:5f7bc45bc2e8
File content as of revision 7:6c7af1d50fb3:
#include <stdint.h>
#include "mbed.h"
#include "NullBuffer.h"
struct NullBuffer_private {
int8_t *pData;
uint8_t size;
uint8_t isUpdated;
};
void NullBuffer_push(PortBuffer* _this, const int8_t* data, uint8_t size);
void NullBuffer_pop(PortBuffer* _this, int8_t* dst, uint8_t size);
uint8_t NullBuffer_getNextDataSize(PortBuffer* _this);
uint8_t NullBuffer_hasNext(PortBuffer* _this);
PortBuffer* NullBuffer_create()
{
struct NullBuffer_private* privateData =
(struct NullBuffer_private*)malloc(sizeof(struct NullBuffer_private));
privateData->pData = NULL;
privateData->size = 0;
privateData->isUpdated = 0;
PortBuffer* retval = (PortBuffer*)malloc(sizeof(PortBuffer));
retval->push = NullBuffer_push;
retval->pop = NullBuffer_pop;
retval->getNextDataSize = NullBuffer_getNextDataSize;
retval->hasNext = NullBuffer_hasNext;
retval->privateData = (void*)privateData;
return retval;
}
void NullBuffer_destroy(PortBuffer* _this) {
struct NullBuffer_private* nullBuffer =
(struct NullBuffer_private*)(_this->privateData);
free(nullBuffer->pData);
free(nullBuffer);
free(_this);
}
void NullBuffer_push(PortBuffer* _this, const int8_t* data, uint8_t size) {
struct NullBuffer_private* nullBuffer =
(struct NullBuffer_private*)(_this->privateData);
if(size != nullBuffer->size) {
free(nullBuffer->pData);
nullBuffer->pData = (int8_t*)malloc(size);
nullBuffer->size = size;
}
memcpy(nullBuffer->pData, data, size);
nullBuffer->isUpdated = 1;
}
void NullBuffer_pop(PortBuffer* _this, int8_t* dst, uint8_t size)
{
struct NullBuffer_private* nullBuffer =
(struct NullBuffer_private*)(_this->privateData);
if(nullBuffer->size <= size) {
memcpy(dst, nullBuffer->pData, nullBuffer->size);
}
nullBuffer->isUpdated = 0;
}
uint8_t NullBuffer_getNextDataSize(PortBuffer* _this){
return ((struct NullBuffer_private*)(_this->privateData))->size;
}
uint8_t NullBuffer_hasNext(PortBuffer* _this) {
return ((struct NullBuffer_private*)(_this->privateData))->isUpdated;
}
Yuki Suga