Commit 269f43d1 authored by Pavel Vainerman's avatar Pavel Vainerman

add new MTR type: "T10"

parent 21d51161
......@@ -104,6 +104,15 @@ int main( int argc, const char **argv )
<< ":" << setw(2) << t.sec() << "." << setw(2) << t.ssec()
<< endl;
}
else if( !strcmp(type,"T10") )
{
T10 t(v1,v2);
cout << "(T10): v1=" << t.raw.v[0] << " v2=" << t.raw.v[1]
<< " ===> " << setfill('0') << dec
<< setw(4) << t.year() << "/" << setw(2) << t.mon()
<< "/" << setw(2) << t.day()
<< endl;
}
else if( !strcmp(type,"F1") )
{
F1 f(v1,v2);
......
......@@ -29,6 +29,7 @@ namespace MTR
mtT7,
mtT8,
mtT9,
mtT10,
mtT16,
mtT17,
mtF1,
......@@ -465,6 +466,54 @@ namespace MTR
T9mem raw;
};
// -------------------------------------------------------------------------
class T10
{
public:
// ------------------------------------------
/*! тип хранения в памяти */
typedef union
{
unsigned short v[u2size];
struct u_T10
{
unsigned short year:16;
unsigned short mon:8;
unsigned short day:8;
}__attribute__( ( packed ) ) u2;
} T10mem;
// ------------------------------------------
// конструкторы на разные случаи...
T10(){ memset(raw.v,0,sizeof(raw.v)); }
T10( unsigned short v1, unsigned short v2 )
{
raw.v[0] = v1;
raw.v[1] = v2;
}
T10( const ModbusRTU::ModbusData* data, int size )
{
if( size >= u2size )
{
for( int i=0; i<u2size; i++ )
raw.v[i] = data[i];
}
}
inline unsigned short year(){ return raw.u2.year; }
inline unsigned short mon(){ return raw.u2.mon; }
inline unsigned short day(){ return raw.u2.day; }
~T10(){}
// ------------------------------------------
/*! размер в словах */
static int wsize(){ return u2size; }
/*! тип значения */
static MTRType type(){ return mtT10; }
// ------------------------------------------
T10mem raw;
};
// --------------------------------------------------------------------------
class T16
{
public:
......
......@@ -34,6 +34,8 @@ MTRType str2type( const std::string s )
return mtT8;
if( s == "T9" )
return mtT9;
if( s == "T10" )
return mtT10;
if( s == "T16" )
return mtT16;
if( s == "T17" )
......@@ -68,6 +70,8 @@ string type2str( MTRType t )
return "T8";
if( t == mtT9 )
return "T9";
if( t == mtT10 )
return "T10";
if( t == mtT16 )
return "T16";
if( t == mtT17 )
......@@ -102,6 +106,8 @@ int wsize( MTRType t )
return T8::wsize();
if( t == mtT9 )
return T9::wsize();
if( t == mtT10 )
return T10::wsize();
if( t == mtT16 )
return T16::wsize();
if( t == mtT17 )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment