tool/DataTypeHandler.cpp
changeset 1888 02aedba35b94
parent 1875 01d31e749ee2
child 1893 9a136c0c30a2
equal deleted inserted replaced
1887:a502f542f63d 1888:02aedba35b94
    73 		<< "the --type option:" << endl
    73 		<< "the --type option:" << endl
    74 		<< "  bool," << endl
    74 		<< "  bool," << endl
    75 		<< "  int8, int16, int32, int64," << endl
    75 		<< "  int8, int16, int32, int64," << endl
    76 		<< "  uint8, uint16, uint32, uint64," << endl
    76 		<< "  uint8, uint16, uint32, uint64," << endl
    77 		<< "  float, double" << endl
    77 		<< "  float, double" << endl
    78 		<< "  string, octet_string, unicode_string." << endl;
    78 		<< "  string, octet_string, unicode_string." << endl
       
    79         << "For sign-and-magnitude coding, use the following types:" << endl
       
    80         << "  sm8, sm16, sm32, sm64" << endl;
    79 	return s.str();
    81 	return s.str();
    80 }
    82 }
    81 
    83 
    82 /****************************************************************************/
    84 /****************************************************************************/
    83 
    85 
   227         case 0x001a: // uint56
   229         case 0x001a: // uint56
   228             {
   230             {
   229                 stringstream err;
   231                 stringstream err;
   230                 err << "Non-native integer type " << type->name
   232                 err << "Non-native integer type " << type->name
   231 					<< " is not yet implemented.";
   233 					<< " is not yet implemented.";
       
   234                 throw runtime_error(err.str());
       
   235             }
       
   236 
       
   237         case 0xfffb: // sm8
       
   238         case 0xfffc: // sm16
       
   239         case 0xfffd: // sm32
       
   240         case 0xfffe: // sm64
       
   241             {
       
   242                 stringstream err;
       
   243                 err << "Sign-and-magitude types not yet"
       
   244                     " implemented for input direction.";
   232                 throw runtime_error(err.str());
   245                 throw runtime_error(err.str());
   233             }
   246             }
   234 
   247 
   235         default:
   248         default:
   236             {
   249             {
   350         case 0x001b: // uint64
   363         case 0x001b: // uint64
   351             {
   364             {
   352                 uint64_t val = le64_to_cpup(data);
   365                 uint64_t val = le64_to_cpup(data);
   353                 o << "0x" << hex << setw(16) << val
   366                 o << "0x" << hex << setw(16) << val
   354                     << " " << dec << val << endl;
   367                     << " " << dec << val << endl;
       
   368             }
       
   369             break;
       
   370         case 0xfffb: // sm8
       
   371             {
       
   372                 int8_t val = *(uint8_t *) data;
       
   373                 int8_t smval = val < 0 ? (val & 0x7f) * -1 : val;
       
   374                 
       
   375                 o << "0x" << hex << setw(2) << (int) val
       
   376                     << " " << dec << (int) smval << endl;
       
   377             }
       
   378             break;
       
   379         case 0xfffc: // sm16
       
   380             {
       
   381                 int16_t val = le16_to_cpup(data);
       
   382                 int16_t smval = val < 0 ? (val & 0x7fff) * -1 : val;
       
   383                 
       
   384                 o << "0x" << hex << setw(4) << val
       
   385                     << " " << dec << smval << endl;
       
   386             }
       
   387             break;
       
   388         case 0xfffd: // sm32
       
   389             {
       
   390                 int32_t val = le32_to_cpup(data);
       
   391                 int32_t smval = val < 0 ? (val & 0x7fffffffUL) * -1 : val;
       
   392                 
       
   393                 o << "0x" << hex << setw(8) << val
       
   394                     << " " << dec << smval << endl;
       
   395             }
       
   396             break;
       
   397         case 0xfffe: // sm64
       
   398             {
       
   399                 int64_t val = le64_to_cpup(data);
       
   400                 int64_t smval =
       
   401                     val < 0 ? (val & 0x7fffffffffffffffULL) * -1 : val;
       
   402                 
       
   403                 o << "0x" << hex << setw(16) << val
       
   404                     << " " << dec << smval << endl;
   355             }
   405             }
   356             break;
   406             break;
   357 
   407 
   358         default:
   408         default:
   359             printRawData(o, (const uint8_t *) data, dataSize); // FIXME
   409             printRawData(o, (const uint8_t *) data, dataSize); // FIXME
   404     {"uint40",         0x0018, 5},
   454     {"uint40",         0x0018, 5},
   405     {"uint48",         0x0019, 6},
   455     {"uint48",         0x0019, 6},
   406     {"uint56",         0x001a, 7},
   456     {"uint56",         0x001a, 7},
   407     {"uint64",         0x001b, 8},
   457     {"uint64",         0x001b, 8},
   408 	// reserved        0x001c-0x001f
   458 	// reserved        0x001c-0x001f
       
   459     {"sm8",            0xfffb, 1}, // sign-and-magnitude coding
       
   460     {"sm16",           0xfffc, 2}, // sign-and-magnitude coding
       
   461     {"sm32",           0xfffd, 4}, // sign-and-magnitude coding
       
   462     {"sm64",           0xfffe, 8}, // sign-and-magnitude coding
   409     {"raw",            0xffff, 0},
   463     {"raw",            0xffff, 0},
   410     {}
   464     {}
   411 };
   465 };
   412 
   466 
   413 /*****************************************************************************/
   467 /*****************************************************************************/