Extend DIF debug output (storage number LSB)

Fix DIFE debug output (storage number, tariff, device unit)
Fix typos in comments
Replace magic bit masks with defines
This commit is contained in:
Stefan Wahren 2013-11-06 11:11:43 +01:00
parent 3aa81cfb23
commit e9d39d4708
2 changed files with 15 additions and 13 deletions

View File

@ -849,7 +849,7 @@ int mbus_variable_value_decode(mbus_data_record *record, double *value_out_real,
vif = (record->drh.vib.vif & MBUS_DIB_VIF_WITHOUT_EXTENSION); vif = (record->drh.vib.vif & MBUS_DIB_VIF_WITHOUT_EXTENSION);
vife = (record->drh.vib.vife[0] & MBUS_DIB_VIF_WITHOUT_EXTENSION); vife = (record->drh.vib.vife[0] & MBUS_DIB_VIF_WITHOUT_EXTENSION);
switch (record->drh.dib.dif & 0x0F) switch (record->drh.dib.dif & MBUS_DATA_RECORD_DIF_MASK_DATA)
{ {
case 0x00: /* no data */ case 0x00: /* no data */
if ((*value_out_str = (char*) malloc(1)) == NULL) if ((*value_out_str = (char*) malloc(1)) == NULL)

View File

@ -1603,14 +1603,14 @@ mbus_unit_prefix(int exp)
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/// Look up the data lenght from a VIF field in the data record. /// Look up the data length from a DIF field in the data record.
/// ///
/// See the table on page 41 the M-BUS specification. /// See the table on page 41 the M-BUS specification.
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
unsigned char unsigned char
mbus_dif_datalength_lookup(unsigned char dif) mbus_dif_datalength_lookup(unsigned char dif)
{ {
switch (dif&0x0F) switch (dif & MBUS_DATA_RECORD_DIF_MASK_DATA)
{ {
case 0x0: case 0x0:
return 0; return 0;
@ -2221,7 +2221,7 @@ mbus_data_record_decode(mbus_data_record *record)
vif = (record->drh.vib.vif & MBUS_DIB_VIF_WITHOUT_EXTENSION); vif = (record->drh.vib.vif & MBUS_DIB_VIF_WITHOUT_EXTENSION);
vife = (record->drh.vib.vife[0] & MBUS_DIB_VIF_WITHOUT_EXTENSION); vife = (record->drh.vib.vife[0] & MBUS_DIB_VIF_WITHOUT_EXTENSION);
switch (record->drh.dib.dif & 0x0F) switch (record->drh.dib.dif & MBUS_DATA_RECORD_DIF_MASK_DATA)
{ {
case 0x00: // no data case 0x00: // no data
@ -2890,7 +2890,7 @@ mbus_data_variable_parse(mbus_frame *frame, mbus_data_variable *data)
} }
// re-calculate data length, if of variable length type // re-calculate data length, if of variable length type
if ((record->drh.dib.dif & 0x0F) == 0x0D) // flag for variable length data if ((record->drh.dib.dif & MBUS_DATA_RECORD_DIF_MASK_DATA) == 0x0D) // flag for variable length data
{ {
if(frame->data[i] <= 0xBF) if(frame->data[i] <= 0xBF)
record->data_len = frame->data[i++]; record->data_len = frame->data[i++];
@ -3335,6 +3335,7 @@ mbus_data_variable_print(mbus_data_variable *data)
// DIF // DIF
printf("DIF = %.2X\n", record->drh.dib.dif); printf("DIF = %.2X\n", record->drh.dib.dif);
printf("DIF.Extension = %s\n", (record->drh.dib.dif & MBUS_DIB_DIF_EXTENSION_BIT) ? "Yes":"No"); printf("DIF.Extension = %s\n", (record->drh.dib.dif & MBUS_DIB_DIF_EXTENSION_BIT) ? "Yes":"No");
printf("DIF.StorageNumber = %d\n", (record->drh.dib.dif & MBUS_DATA_RECORD_DIF_MASK_STORAGE_NO) >> 6);
printf("DIF.Function = %s\n", (record->drh.dib.dif & 0x30) ? "Minimum value" : "Instantaneous value" ); printf("DIF.Function = %s\n", (record->drh.dib.dif & 0x30) ? "Minimum value" : "Instantaneous value" );
printf("DIF.Data = %.2X\n", record->drh.dib.dif & 0x0F); printf("DIF.Data = %.2X\n", record->drh.dib.dif & 0x0F);
@ -3365,9 +3366,10 @@ mbus_data_variable_print(mbus_data_variable *data)
unsigned char dife = record->drh.dib.dife[j]; unsigned char dife = record->drh.dib.dife[j];
printf("DIFE[%zd] = %.2X\n", j, dife); printf("DIFE[%zd] = %.2X\n", j, dife);
printf("DIFE[%zd].Extension = %s\n", j, (dife & MBUS_DIB_DIF_EXTENSION_BIT) ? "Yes" : "No"); printf("DIFE[%zd].Extension = %s\n", j, (dife & MBUS_DATA_RECORD_DIFE_MASK_EXTENSION) ? "Yes" : "No");
printf("DIFE[%zd].Function = %s\n", j, (dife & 0x30) ? "Minimum value" : "Instantaneous value" ); printf("DIFE[%zd].Device = %d\n", j, (dife & MBUS_DATA_RECORD_DIFE_MASK_DEVICE) >> 6 );
printf("DIFE[%zd].Data = %.2X\n", j, dife & 0x0F); printf("DIFE[%zd].Tariff = %d\n", j, (dife & MBUS_DATA_RECORD_DIFE_MASK_TARIFF) >> 4 );
printf("DIFE[%zd].StorageNumber = %.2X\n", j, dife & MBUS_DATA_RECORD_DIFE_MASK_STORAGE_NO);
} }
// VIF // VIF