Esempio n. 1
0
struct fit_record_data *search_for_data(int record_num, int *data_nelms) {
    switch(record_num) {
        case FITFILE_MSGTYPE_FILE_ID:
            *data_nelms = SIZEOFARRAY(file_info_data);
            return file_info_data;
        case FITFILE_MSGTYPE_FILE_CREATOR:
            *data_nelms = SIZEOFARRAY(file_creator_data);
            return file_creator_data;
        case FITFILE_MSGTYPE_EVENT:
            *data_nelms = SIZEOFARRAY(event_data);
            return event_data;
        case FITFILE_MSGTYPE_DEVICE_INFO:
            *data_nelms = SIZEOFARRAY(device_info_data);
            return device_info_data;
        case FITFILE_MSGTYPE_RECORD:
            *data_nelms = SIZEOFARRAY(record_data);
            return record_data;
        case FITFILE_MSGTYPE_LAP:
            *data_nelms = SIZEOFARRAY(lap_data);
            return lap_data;
        case FITFILE_MSGTYPE_SESSION:
            *data_nelms = SIZEOFARRAY(session_data);
            return session_data;
        case FITFILE_MSGTYPE_ACTIVITY:
            *data_nelms = SIZEOFARRAY(activity_data);
            return activity_data;
        default:
            //fprintf(stdout, "Unknown record type %d\n", record_num);
            return NULL;
    }

}
Esempio n. 2
0
// allocate a small chunk of memory.
void * kmalloc(size_t size, int gfp_flags) {

	int i;
	void * p;
	for(i=0;i<SIZEOFARRAY(_pools);i++)
		if( ( gfp_flags & _pools[i].gfp_flags ) == _pools[i].gfp_flags )
			if( _pools[i].chunk_size >= size ) {

				// create the mem_cache if it does not exist.
				if(!_pools_mem_cache[i])
					if( 0 != mem_cache_new(
						&(_pools_mem_cache[i]),
						_pools[i].pages,
						_pools[i].chunk_size,
						_pools[i].gfp_flags) )
							return NULL; // OUT OF MEMORY!

				// allocate the requested memory.
				p = mem_cache_alloc( _pools_mem_cache[i] );

				if(p && (gfp_flags & GFP_ZERO ) )
					memset(p, 0, size);

				return p;
			}

	// bad size or gfp_flags!
	return NULL;
}
Esempio n. 3
0
int kfree(const void * mem) {

	int i;

	if(!mem)
		return 0;

	for(i=0;i<SIZEOFARRAY(_pools);i++)
		if( _pools_mem_cache[i] )
			if( mem_cache_free(_pools_mem_cache[i], mem) == 0 )
				return 0;
	return -1;
}
Esempio n. 4
0
int fit_process_file(void) {
    int nelms;

    /* Check the file is a correct .FIT file by the header */
    struct fit_header hdr;
    if ((nelms = fread(&hdr, sizeof(hdr), 1, fp)) != 1) {
        exit(1);
    }
    //nbytes += sizeof(hdr);
    //print_header(&hdr);
    if (check_header(&hdr)) {
        exit(1);
    }

    print_xml_header();

    while (nbytes < hdr.file_size) {
        uint8_t record_hdr;
        if ((nelms = fread(&record_hdr, sizeof(record_hdr), 1, fp)) != 1) {
        }
        nbytes += sizeof(record_hdr);
        //print_record_hdr(record_hdr);

        if (record_hdr & RECORD_DEFINITION_MESSAGE_HDR) {
            /* The record first contains a definition */
            fetch_record_definition(record_hdr & RECORD_TYPE_MASK);
            continue;
        }

        /* Fetch the definition */
        struct fit_definition *def;
        def = search_for_def(record_hdr & RECORD_TYPE_MASK);
        if (!def) {
            fprintf(stdout, "Unable to find definition for message type\n");
            exit(1);
        }

        /* Search for the data definition */
        struct fit_record_data *data;
        int data_len;
        data = search_for_data(record_hdr & RECORD_TYPE_MASK, &data_len);
        
        uint8_t array[def->record_size];
        read_data(array, sizeof(array), def, data, data_len);

        /* Read the record out */
        switch(record_hdr & RECORD_TYPE_MASK) {
            case FITFILE_MSGTYPE_RECORD:
            {
                //struct fit_record *record = (struct fit_record *) array;
                if (display == DISPLAY_RECORDS) {
                    print_xml_open_tag("record", stdout, 1);
                    printf("\n");
                    print_xml_record_data(array, record_data,
                            SIZEOFARRAY(record_data), stdout, 2);
                    print_xml_close_tag("record", stdout, 1);
                    printf("\n");
                    //print_record_data(array, record_data,
                }
            }
            break;

            case FITFILE_MSGTYPE_LAP:
            {
                //struct fit_lap *lap = (struct fit_lap *) array;
                if (display == DISPLAY_LAPS) {
                    print_xml_open_tag("lap", stdout, 1);
                    printf("\n");
                    print_xml_record_data(array, lap_data, 
                            SIZEOFARRAY(lap_data), stdout, 2);
                    print_xml_close_tag("lap", stdout, 1);
                    printf("\n");
                }
            }
            break;

            case FITFILE_MSGTYPE_SESSION:
            {
                //struct fit_session *session = (struct fit_session *) array;
                if (display == DISPLAY_SESSIONS) {
                    print_xml_open_tag("session", stdout, 1);
                    printf("\n");
                    print_xml_record_data(array, session_data,
                            SIZEOFARRAY(session_data), stdout, 2);
                    print_xml_close_tag("session", stdout, 1);
                    printf("\n");
                }
            }
            break;
            default:
                //fprintf(stdout, "Unknown record type %d\n", record_hdr & RECORD_TYPE_MASK);
                break;
        }

#if 0
        switch(record_hdr & RECORD_TYPE_MASK) {
            case FITFILE_MSGTYPE_FILE_ID:
                printf("FILE_ID\n");
                print_record_data(array, file_info_data,
                                         SIZEOFARRAY(file_info_data));
                break;
            case FITFILE_MSGTYPE_FILE_CREATOR:
                printf("FILE_CREATOR\n");
                print_record_data(array, file_creator_data,
                                         SIZEOFARRAY(file_creator_data));
                break;

            case FITFILE_MSGTYPE_EVENT:
            {
                printf("EVENT\n");
                print_record_data(array, event_data,
                                         SIZEOFARRAY(event_data));
                //struct fit_event *event = (struct fit_event *) array;
            }
            break;

            case FITFILE_MSGTYPE_DEVICE_INFO:
            {
                printf("DEVICE_INFO\n");
                print_record_data(array, device_info_data,
                                         SIZEOFARRAY(device_info_data));

                //struct fit_device_info *device_info = (struct fit_device_info *) array;
            }
            break;

            case FITFILE_MSGTYPE_RECORD:
            {
                printf("RECORD\n");
                print_record_data(array, record_data,
                                         SIZEOFARRAY(record_data));
                //struct fit_record *record = (struct fit_record *) array;
            }
            break;

            case FITFILE_MSGTYPE_LAP:
            {
                printf("LAP\n");
                print_record_data(array, lap_data,
                                         SIZEOFARRAY(lap_data));
                //struct fit_lap *lap = (struct fit_lap *) array;
            }
            break;

            case FITFILE_MSGTYPE_SESSION:
            {
                printf("SESSION\n");
                print_record_data(array, session_data,
                                         SIZEOFARRAY(session_data));
                //struct fit_session *session = (struct fit_session *) array;
            }
            break;
            case FITFILE_MSGTYPE_ACTIVITY:
            {
                printf("ACTIVITY\n");
                print_record_data(array, activity_data,
                                         SIZEOFARRAY(activity_data));
                //struct fit_activity *activity = (struct fit_activity *) array;

            }
            break;

            default:
                fprintf(stdout, "Unknown record type %d\n", record_hdr & RECORD_TYPE_MASK);
        }
#endif
        //printf("\n");
    }

    /* Perform CRC check */
    #if 0
    uint16_t crc;
    if ((nelms = fread(&crc, sizeof(crc), 1, fp)) != 1) {
    }
    printf("crc = 0x%04x\n", crc);
    #endif

    fclose(fp);

    print_xml_footer();

    return 0;
}