Created
May 30, 2016 06:59
-
-
Save MoLow/31fc58eca2b8059a20328ead7a68668b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h>; | |
#define kTocMetaData (1L<<1) | |
#define kTocRawData (1L<<3) | |
#define kTocDAQmxRawData (1L<<7) | |
#define kTocInterleavedData (1L<<5) | |
#define kTocBigEndian (1L<<6) | |
#define kTocNewObjList (1L<<2) | |
typedef enum { | |
tdsTypeVoid, | |
tdsTypeI8, | |
tdsTypeI16, | |
tdsTypeI32, | |
tdsTypeI64, | |
tdsTypeU8, | |
tdsTypeU16, | |
tdsTypeU32, | |
tdsTypeU64, | |
tdsTypeSingleFloat, | |
tdsTypeDoubleFloat, | |
tdsTypeExtendedFloat, | |
tdsTypeSingleFloatWithUnit = 0x19, | |
tdsTypeDoubleFloatWithUnit, | |
tdsTypeExtendedFloatWithUnit, | |
tdsTypeString = 0x20, | |
tdsTypeBoolean = 0x21, | |
tdsTypeTimeStamp = 0x44, | |
tdsTypeFixedPoint = 0x4F, | |
tdsTypeComplexSingleFloat = 0x08000c, | |
tdsTypeComplexDoubleFloat = 0x10000d, | |
tdsTypeDAQmxRawData = 0xFFFFFFFF | |
} tdsDataType; | |
typedef struct | |
{ | |
unsigned int path_length; | |
tdsDataType data_type; | |
char *path; | |
} metadata_item; | |
typedef struct { | |
unsigned int items_count; | |
unsigned int cursor; | |
metadata_item *items; | |
} metadata; | |
char *filename = "sample.tdms"; | |
char *get_segment(const char *file, unsigned long long int offset, unsigned long long int length){ | |
FILE *ptr = fopen(file, "rb"); | |
char *result = (char *)malloc(length + 1); | |
fseek(ptr, offset, SEEK_SET); | |
fread(result, sizeof(char), length, ptr); | |
result[length] = 0; | |
fclose(ptr); | |
return result; | |
} | |
void read_metadata(int start){ | |
char *buf = get_segment(filename, start, 4); | |
metadata md; | |
struct metadata_item * items = malloc((sizeof(metadata_item)) * (md.items_count = toUint32(buf, 0, 4, 0))); //create array of metadata items | |
md.cursor = start + 4; | |
md.items = items; | |
free(buf); | |
for (int i = 0; i < md.items_count; i++){ | |
//read length of path and then path | |
md.items[i].path_length = toUint32(buf = get_segment(filename, (md.cursor += 4) - 4, 4), 0, 4, 0); | |
md.items[i].path = get_segment(filename, (md.cursor += md.items[i].path_length) - md.items[i].path_length, md.items[i].path_length); | |
unsigned int rawDataIndexLength = toUint32(buf = get_segment(filename, (md.cursor += 4) - 4, 4), 0, 4, 0); | |
md.items[i].data_type =(tdsDataType)toUint32(buf = get_segment(filename, (md.cursor += 4) - 4, 4), 0, 4, 0); | |
} | |
} | |
unsigned long long int toUint64(char * buffer, int start, int length, int bigEndian){ | |
unsigned long long int result = (unsigned long long int)buffer[start], m = 8; | |
for (int i = start + 1; i < start + length; i++){ | |
result = result | (unsigned long long int)buffer[i] << m; | |
m += 8; | |
} | |
return result; | |
} | |
unsigned int toUint32(char * buffer, int start, int length, int bigEndian){ | |
unsigned int result = (unsigned int)buffer[start], m = 8; | |
for (int i = start + 1; i < start + length; i++){ | |
result = result | (unsigned int)buffer[i] << m; | |
m += 8; | |
} | |
return result; | |
} | |
int main(){ | |
printf("RoadMap\n-------------------- -\nMenu:\n1. Obstacle acquisition.\n2. Generate PRM and find shortest path.\n3. Temperature check.\n4. Plot.\n5. Students addition\n6. Exit.\n"); | |
int input = 0; | |
while (1){ | |
printf("Enter choice:\n"); | |
scanf("%d", &input); | |
if (input == 1){ | |
char *leadin = get_segment(filename, 0, 28); | |
printf("TDMS version - %d\n", toUint32(leadin, 8, 4, 0)); | |
free(leadin); | |
read_metadata(28); | |
} | |
else if (input == 2) | |
exit(); | |
else if (input == 3) | |
exit(); | |
else if (input == 4) | |
exit(); | |
else if (input == 5) | |
exit(); | |
else if (input == 6){ | |
printf("Bye Bye!\n"); | |
exit(1); | |
} | |
else | |
printf("Error: unkonwn input\n"); | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment