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

Committer:
ysuga
Date:
Thu Aug 29 05:29:55 2013 +0000
Revision:
7:6c7af1d50fb3
Parent:
0:5f7bc45bc2e8
update v5

Who changed what in which revision?

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