Merge pull request #65 from mhei/manufacturer-id
Add a function to calculate the manufacturer ID from the 3 byte ASCII
This commit is contained in:
commit
9e81912a20
@ -21,6 +21,41 @@ static char error_str[512];
|
|||||||
|
|
||||||
#define NITEMS(x) (sizeof(x)/sizeof(x[0]))
|
#define NITEMS(x) (sizeof(x)/sizeof(x[0]))
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Returns the manufacturer ID according to the manufacturer's 3 byte ASCII code
|
||||||
|
// or zero when there was an error.
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
unsigned int
|
||||||
|
mbus_manufacturer_id(char *manufacturer)
|
||||||
|
{
|
||||||
|
unsigned int id;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* manufacturer must consist of at least 3 alphabetic characters,
|
||||||
|
* additional chars are silently ignored.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!manufacturer || strlen(manufacturer) < 3)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!isalpha(manufacturer[0]) ||
|
||||||
|
!isalpha(manufacturer[1]) ||
|
||||||
|
!isalpha(manufacturer[2]))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
id = (toupper(manufacturer[0]) - 64) * 32 * 32 +
|
||||||
|
(toupper(manufacturer[1]) - 64) * 32 +
|
||||||
|
(toupper(manufacturer[2]) - 64);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Valid input data should be in the range of 'AAA' to 'ZZZ' according to
|
||||||
|
* the FLAG Association (http://www.dlms.com/flag/), thus resulting in
|
||||||
|
* an ID from 0x0421 to 0x6b5a. If the conversion results in anything not
|
||||||
|
* in this range, simply discard it and return 0 instead.
|
||||||
|
*/
|
||||||
|
return (0x0421 <= id && id <= 0x6b5a) ? id : 0;
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// internal data
|
// internal data
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
@ -809,7 +844,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
{
|
{
|
||||||
manufacturer = (header->manufacturer[1] << 8) + header->manufacturer[0];
|
manufacturer = (header->manufacturer[1] << 8) + header->manufacturer[0];
|
||||||
|
|
||||||
if (manufacturer == MBUS_VARIABLE_DATA_MAN_ACW)
|
if (manufacturer == mbus_manufacturer_id("ACW"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -833,7 +868,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_EFE)
|
else if (manufacturer == mbus_manufacturer_id("EFE"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -845,7 +880,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_ELV)
|
else if (manufacturer == mbus_manufacturer_id("ELV"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -875,7 +910,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_GMC)
|
else if (manufacturer == mbus_manufacturer_id("GMC"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -884,7 +919,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_SLB)
|
else if (manufacturer == mbus_manufacturer_id("SLB"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -896,7 +931,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_HYD)
|
else if (manufacturer == mbus_manufacturer_id("HYD"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -905,7 +940,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_LUG)
|
else if (manufacturer == mbus_manufacturer_id("LUG"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -923,7 +958,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_RAM)
|
else if (manufacturer == mbus_manufacturer_id("RAM"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -932,7 +967,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_RKE)
|
else if (manufacturer == mbus_manufacturer_id("RKE"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -941,7 +976,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_SVM)
|
else if (manufacturer == mbus_manufacturer_id("SVM"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -953,7 +988,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_SON)
|
else if (manufacturer == mbus_manufacturer_id("SON"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -962,7 +997,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_LSE)
|
else if (manufacturer == mbus_manufacturer_id("LSE"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -971,7 +1006,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_SEN)
|
else if (manufacturer == mbus_manufacturer_id("SEN"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -980,7 +1015,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_SPX)
|
else if (manufacturer == mbus_manufacturer_id("SPX"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -990,7 +1025,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_ELS)
|
else if (manufacturer == mbus_manufacturer_id("ELS"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -999,7 +1034,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_NZR)
|
else if (manufacturer == mbus_manufacturer_id("NZR"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -1008,7 +1043,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_KAM)
|
else if (manufacturer == mbus_manufacturer_id("KAM"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -1020,7 +1055,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_EMH)
|
else if (manufacturer == mbus_manufacturer_id("EMH"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -1029,7 +1064,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_TCH)
|
else if (manufacturer == mbus_manufacturer_id("TCH"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
@ -1038,7 +1073,7 @@ mbus_data_product_name(mbus_data_variable_header *header)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (manufacturer == MBUS_VARIABLE_DATA_MAN_ZRM)
|
else if (manufacturer == mbus_manufacturer_id("ZRM"))
|
||||||
{
|
{
|
||||||
switch (header->version)
|
switch (header->version)
|
||||||
{
|
{
|
||||||
|
@ -492,30 +492,11 @@ typedef struct _mbus_data_secondary_address {
|
|||||||
#define MBUS_VARIABLE_DATA_MEDIUM_PRESSURE 0x18
|
#define MBUS_VARIABLE_DATA_MEDIUM_PRESSURE 0x18
|
||||||
#define MBUS_VARIABLE_DATA_MEDIUM_ADC 0x19
|
#define MBUS_VARIABLE_DATA_MEDIUM_ADC 0x19
|
||||||
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_ACW 0x0477
|
//
|
||||||
#define MBUS_VARIABLE_DATA_MAN_ABB 0x0442
|
// Returns the manufacturer ID or zero if the given
|
||||||
#define MBUS_VARIABLE_DATA_MAN_AMT 0x05B4
|
// string could not be converted into an ID
|
||||||
#define MBUS_VARIABLE_DATA_MAN_EFE 0x14C5
|
//
|
||||||
#define MBUS_VARIABLE_DATA_MAN_ELS 0x1593
|
unsigned int mbus_manufacturer_id(char *manufacturer);
|
||||||
#define MBUS_VARIABLE_DATA_MAN_ELV 0x1596
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_EMH 0x15A8
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_GMC 0x1DA3
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_HYD 0x2324
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_KAM 0x2C2D
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_LSE 0x3265
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_LUG 0x32A7
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_NZR 0x3B52
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_PAD 0x4024
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_QDS 0x4493
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_RAM 0x482D
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_RKE 0x4965
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_SEN 0x4CAE
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_SLB 0x4D82
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_SON 0x4DEE
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_SPX 0x4E18
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_SVM 0x4ECD
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_TCH 0x5068
|
|
||||||
#define MBUS_VARIABLE_DATA_MAN_ZRM 0x6A4D
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Event callback functions
|
// Event callback functions
|
||||||
|
Loading…
x
Reference in New Issue
Block a user