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

Committer:
ysuga
Date:
Thu Feb 09 02:33:10 2012 +0000
Revision:
0:9fac71a0bff3
RTno Version 3: RTno is a software library and tool to connect embedded devices like arduino and mbed to RT-middleware world.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ysuga 0:9fac71a0bff3 1 #include <stdint.h>
ysuga 0:9fac71a0bff3 2 #include "mbed.h"
ysuga 0:9fac71a0bff3 3
ysuga 0:9fac71a0bff3 4 #include "NullBuffer.h"
ysuga 0:9fac71a0bff3 5
ysuga 0:9fac71a0bff3 6 struct NullBuffer_private {
ysuga 0:9fac71a0bff3 7 int8_t *pData;
ysuga 0:9fac71a0bff3 8 uint8_t size;
ysuga 0:9fac71a0bff3 9 uint8_t isUpdated;
ysuga 0:9fac71a0bff3 10 };
ysuga 0:9fac71a0bff3 11
ysuga 0:9fac71a0bff3 12 void NullBuffer_push(PortBuffer* _this, const int8_t* data, uint8_t size);
ysuga 0:9fac71a0bff3 13 void NullBuffer_pop(PortBuffer* _this, int8_t* dst, uint8_t size);
ysuga 0:9fac71a0bff3 14 uint8_t NullBuffer_getNextDataSize(PortBuffer* _this);
ysuga 0:9fac71a0bff3 15 uint8_t NullBuffer_hasNext(PortBuffer* _this);
ysuga 0:9fac71a0bff3 16
ysuga 0:9fac71a0bff3 17
ysuga 0:9fac71a0bff3 18 PortBuffer* NullBuffer_create()
ysuga 0:9fac71a0bff3 19 {
ysuga 0:9fac71a0bff3 20 struct NullBuffer_private* privateData =
ysuga 0:9fac71a0bff3 21 (struct NullBuffer_private*)malloc(sizeof(struct NullBuffer_private));
ysuga 0:9fac71a0bff3 22
ysuga 0:9fac71a0bff3 23 privateData->pData = NULL;
ysuga 0:9fac71a0bff3 24 privateData->size = 0;
ysuga 0:9fac71a0bff3 25 privateData->isUpdated = 0;
ysuga 0:9fac71a0bff3 26 PortBuffer* retval = (PortBuffer*)malloc(sizeof(PortBuffer));
ysuga 0:9fac71a0bff3 27 retval->push = NullBuffer_push;
ysuga 0:9fac71a0bff3 28 retval->pop = NullBuffer_pop;
ysuga 0:9fac71a0bff3 29 retval->getNextDataSize = NullBuffer_getNextDataSize;
ysuga 0:9fac71a0bff3 30 retval->hasNext = NullBuffer_hasNext;
ysuga 0:9fac71a0bff3 31 retval->privateData = (void*)privateData;
ysuga 0:9fac71a0bff3 32 return retval;
ysuga 0:9fac71a0bff3 33 }
ysuga 0:9fac71a0bff3 34
ysuga 0:9fac71a0bff3 35 void NullBuffer_destroy(PortBuffer* _this) {
ysuga 0:9fac71a0bff3 36 struct NullBuffer_private* nullBuffer =
ysuga 0:9fac71a0bff3 37 (struct NullBuffer_private*)(_this->privateData);
ysuga 0:9fac71a0bff3 38 free(nullBuffer->pData);
ysuga 0:9fac71a0bff3 39 free(nullBuffer);
ysuga 0:9fac71a0bff3 40 free(_this);
ysuga 0:9fac71a0bff3 41 }
ysuga 0:9fac71a0bff3 42
ysuga 0:9fac71a0bff3 43 void NullBuffer_push(PortBuffer* _this, const int8_t* data, uint8_t size) {
ysuga 0:9fac71a0bff3 44 struct NullBuffer_private* nullBuffer =
ysuga 0:9fac71a0bff3 45 (struct NullBuffer_private*)(_this->privateData);
ysuga 0:9fac71a0bff3 46 if(size != nullBuffer->size) {
ysuga 0:9fac71a0bff3 47 free(nullBuffer->pData);
ysuga 0:9fac71a0bff3 48 nullBuffer->pData = (int8_t*)malloc(size);
ysuga 0:9fac71a0bff3 49 nullBuffer->size = size;
ysuga 0:9fac71a0bff3 50 }
ysuga 0:9fac71a0bff3 51 memcpy(nullBuffer->pData, data, size);
ysuga 0:9fac71a0bff3 52 nullBuffer->isUpdated = 1;
ysuga 0:9fac71a0bff3 53 }
ysuga 0:9fac71a0bff3 54
ysuga 0:9fac71a0bff3 55 void NullBuffer_pop(PortBuffer* _this, int8_t* dst, uint8_t size)
ysuga 0:9fac71a0bff3 56 {
ysuga 0:9fac71a0bff3 57 struct NullBuffer_private* nullBuffer =
ysuga 0:9fac71a0bff3 58 (struct NullBuffer_private*)(_this->privateData);
ysuga 0:9fac71a0bff3 59 if(nullBuffer->size <= size) {
ysuga 0:9fac71a0bff3 60 memcpy(dst, nullBuffer->pData, nullBuffer->size);
ysuga 0:9fac71a0bff3 61 }
ysuga 0:9fac71a0bff3 62 nullBuffer->isUpdated = 0;
ysuga 0:9fac71a0bff3 63 }
ysuga 0:9fac71a0bff3 64
ysuga 0:9fac71a0bff3 65 uint8_t NullBuffer_getNextDataSize(PortBuffer* _this){
ysuga 0:9fac71a0bff3 66 return ((struct NullBuffer_private*)(_this->privateData))->size;
ysuga 0:9fac71a0bff3 67 }
ysuga 0:9fac71a0bff3 68
ysuga 0:9fac71a0bff3 69 uint8_t NullBuffer_hasNext(PortBuffer* _this) {
ysuga 0:9fac71a0bff3 70 return ((struct NullBuffer_private*)(_this->privateData))->isUpdated;
ysuga 0:9fac71a0bff3 71 }
ysuga 0:9fac71a0bff3 72