예제 #1
0
파일: output.c 프로젝트: chunyang/syncruns
/*
 * If definition has not been written, write it and return a new local message
 * number. Otherwise return the message number corresponding to the message.
 */
FIT_UINT8 write_mesg_defn(FIT_MESG_NUM mesg_num, FILE *fp)
{
    int i;
    FIT_UINT8 local_mesg_num;

    /* See if definition has been written */
    for (i = 0; i < FIT_MAX_LOCAL_MESGS; i++) {
        if (local_mesg_nums[i] == mesg_num) {
            return i;
        }
    }

    /* Definition has not been written, so write it and return new local
     * message number
     */
    local_mesg_num = local_mesg_num_next;
    local_mesg_num_next = (local_mesg_num_next + 1) % FIT_MAX_LOCAL_MESGS;

    /* Definition header */
    FIT_UINT8 header = local_mesg_num | FIT_HDR_TYPE_DEF_BIT;

    /* Definition */
    const FIT_MESG_DEF *def = Fit_GetMesgDef(mesg_num);
    // switch (mesg_num) {
    //     case FIT_MESG_NUM_SESSION:
    //         def = fit_mesg_defs[FIT_MESG_SESSION];
    //         break;
    //     case FIT_MESG_NUM_LAP:
    //         def = fit_mesg_defs[FIT_MESG_LAP];
    //         break;
    //     case FIT_MESG_NUM_RECORD:
    //         def = fit_mesg_defs[FIT_MESG_RECORD];
    //         break;
    //     case FIT_MESG_NUM_EVENT:
    //         def = fit_mesg_defs[FIT_MESG_EVENT];
    //         break;
    //     default:
    //         fprintf(stderr, "Don't know how to write definition for message "
    //                 "number %hd\n", mesg_num);
    //         return -1;
    // }

    /* Write header and definition */
    write_data(&header, FIT_HDR_SIZE, fp);
    write_data(def, Fit_GetMesgDefSize(def), fp);

    /* Update local mesg num mapping */
    local_mesg_nums[local_mesg_num] = mesg_num;
    printf("Wrote definition for local message number %hhd "
            "(matches global number %hd)\n",
            local_mesg_num, mesg_num);

    return local_mesg_num;
}
예제 #2
0
파일: fit.c 프로젝트: dgaff/fitsdk
FIT_UINT8 Fit_GetMesgSize(FIT_UINT16 global_mesg_num)
{
   const FIT_MESG_DEF *mesg_def;
   FIT_UINT8 field;
   FIT_UINT8 size = 0;

   mesg_def = Fit_GetMesgDef(global_mesg_num);

   if (mesg_def == FIT_NULL)
      return 0;

   for (field = 0; field < mesg_def->num_fields; field++)
   {
      size += mesg_def->fields[FIT_MESG_DEF_FIELD_OFFSET(size, field)];
   }

   return size;
}