Advertisement
Guest User

Untitled

a guest
Oct 7th, 2011
536
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.63 KB | None | 0 0
  1. // memhandler.h
  2.  
  3. #ifndef MEMHANDLER_H
  4. #define MEMHANDLER_H
  5.  
  6. int allocMemory(int handle, int numElements);
  7. int getUpdatedMemory(int handle, unsigned char* outputBuffer,
  8.                      int numElements, int timeout);
  9.  
  10. #endif
  11.  
  12. // memhandler.c
  13.  
  14. #include "memhandler.h"
  15. #include "atcore.h"
  16.  
  17. struct buffer {
  18.     unsigned char* data;
  19.     int len;
  20.     struct buffer* next;
  21. };
  22.  
  23. haveInitialized = 0;
  24. struct buffer* firstBuffer;
  25. struct buffer* lastBuffer;
  26.  
  27. int allocMemory(int handle, int numElements) {
  28.     struct buffer* newBuffer = (struct buffer*) malloc(sizeof(struct buffer));
  29.     newBuffer->data = malloc(numElements * sizeof(unsigned char));
  30.     newBuffer->len = numElements;
  31.     newBuffer->next = 0;
  32.     if (haveInitialized) {
  33.         lastBuffer->next = newBuffer;
  34.     }  
  35.     else {
  36.         firstBuffer = newBuffer;
  37.         lastBuffer = newBuffer;
  38.         haveInitialized = 1;
  39.     }
  40.     return AT_QueueBuffer(handle, newBuffer->data, numElements);
  41. }
  42.  
  43. int getUpdatedMemory(int handle, unsigned char* outputBuffer,
  44.                      int numElements, int timeout) {
  45.     char* result;
  46.     int resultSize;
  47.     error = AT_WaitBuffer(handle, &result, &resultSize, timeout);
  48.     if (error) {
  49.         return error;
  50.     }
  51.     curBuffer = firstBuffer;
  52.     while (curBuffer->data != result) {
  53.         if (!curBuffer->next) {
  54.             return 32767; // Random bogus error code.
  55.         }
  56.         curBuffer = firstBuffer->next;
  57.     }
  58.    
  59.     int i;
  60.     // NB what if resultSize < numElements?
  61.     for (i = 0; i < numElements; ++i) {
  62.         outputBuffer[i] = curBuffer->data[i];
  63.     }
  64.     return 0;
  65. }
  66.  
  67.  
  68.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement