Clean up HanToJson library and per meter header files

This commit is contained in:
Vegar Westerlund
2019-06-07 23:33:54 +02:00
parent 605eac8996
commit 711500a581
4 changed files with 150 additions and 239 deletions

View File

@@ -6,10 +6,11 @@
enum class Aidon
{
List1 = 0x01,
List21 = 0x09,
List2 = 0x0D,
List3 = 0x12
List1 = 0x01,
List1PhaseShort = 0x09,
List1PhaseLong = 0xff, // TODO: Need sample
List3PhaseShort = 0x0D,
List3PhaseLong = 0x12
};
enum class Aidon_List1
@@ -24,7 +25,7 @@ enum class Aidon_List1
};
enum class Aidon_List2
enum class Aidon_List1Phase
{
ListSize,
IGN_0,
@@ -67,38 +68,14 @@ enum class Aidon_List2
CurrentL1Int8,
CurrentL1Enum,
IGN_13,
CurrentL2_OBIS,
CurrentL2,
IGN_14,
CurrentL2Int8,
CurrentL2Enum,
IGN_15,
CurrentL3_OBIS,
CurrentL3,
IGN_16,
CurrentL3Int8,
CurrentL3Enum,
IGN_17,
VoltageL1_OBIS,
VoltageL1,
IGN_18,
IGN_14,
VoltageL1Int8,
VoltageL1Enum,
IGN_19,
VoltageL2_OBIS,
VoltageL2,
IGN_20,
VoltageL2Int8,
VoltageL2Enum,
IGN_21,
VoltageL3_OBIS,
VoltageL3,
IGN_22,
VoltageL3Int8,
VoltageL3Enum
};
enum class Aidon_List3
enum class Aidon_List3Phase
{
ListSize,
IGN_0,

View File

@@ -2,11 +2,11 @@
#define _KAIFA_h
enum class Kaifa : byte {
List1 = 0x01,
List21 = 0x09, // list 2 for 1 fase
List2 = 0x0D, // list 2 for 3 fase
List31 = 0x0E, // list 3 for 1 fase
List3 = 0x12 // list 3 for 3 fase
List1 = 0x01,
List1PhaseShort = 0x09,
List3PhaseShort = 0x0D,
List1PhaseLong = 0x0E,
List3PhaseLong = 0x12
};
enum class Kaifa_List1 {
@@ -14,55 +14,7 @@ enum class Kaifa_List1 {
ActivePowerImported
};
enum class Kaifa_List21 {
ListSize,
ListVersionIdentifier,
MeterID,
MeterType,
ActiveImportPower,
ActiveExportPower,
ReactiveImportPower,
ReactiveExportPower,
CurrentL1,
VoltageL1
};
enum class Kaifa_List2 {
ListSize,
ListVersionIdentifier,
MeterID,
MeterType,
ActiveImportPower,
ActiveExportPower,
ReactiveImportPower,
ReactiveExportPower,
CurrentL1,
CurrentL2,
CurrentL3,
VoltageL1,
VoltageL2,
VoltageL3
};
enum class Kaifa_List31 {
ListSize,
ListVersionIdentifier,
MeterID,
MeterType,
ActiveImportPower,
ActiveExportPower,
ReactiveImportPower,
ReactiveExportPower,
CurrentL1,
VoltageL1,
MeterClock,
CumulativeActiveImportEnergy,
CumulativeActiveExportEnergy,
CumulativeReactiveImportEnergy,
CumulativeReactiveExportEnergy
};
enum class Kaifa_List3 {
enum class Kaifa_List3Phase {
ListSize,
ListVersionIdentifier,
MeterID,
@@ -84,7 +36,7 @@ enum class Kaifa_List3 {
CumulativeReactiveExportEnergy
};
enum class Kaifa_List4 { // TODO: Stop using list size like this? Only really need a single long list.
enum class Kaifa_List1Phase {
ListSize,
ListVersionIdentifier,
MeterID,
@@ -94,7 +46,12 @@ enum class Kaifa_List4 { // TODO: Stop using list size like this? Only really ne
ReactiveImportPower,
ReactiveExportPower,
CurrentL1,
CurrentL2,
VoltageL1,
MeterClock,
CumulativeActiveImportEnergy,
CumulativeActiveExportEnergy,
CumulativeReactiveImportEnergy,
CumulativeReactiveExportEnergy
};
#endif

View File

@@ -6,44 +6,13 @@
enum class Kamstrup
{
List1 = 0x19,
List2 = 0x23,
List3 = 0x11,
List4 = 0x1B
List3PhaseShort = 0x19,
List3PhaseLong = 0x23,
List1PhaseShort = 0x11,
List1PhaseLong = 0x1B
};
enum class Kamstrup_List1
{
ListSize,
ListVersionIdentifier,
MeterID_OBIS,
MeterID,
MeterType_OBIS,
MeterType,
ActiveImportPower_OBIS,
ActiveImportPower,
ActiveExportPower_OBIS,
ActiveExportPower,
ReactiveImportPower_OBIS,
ReactiveImportPower,
ReactiveExportPower_OBIS,
ReactiveExportPower,
CurrentL1_OBIS,
CurrentL1,
CurrentL2_OBIS,
CurrentL2,
CurrentL3_OBIS,
CurrentL3,
VoltageL1_OBIS,
VoltageL1,
VoltageL2_OBIS,
VoltageL2,
VoltageL3_OBIS,
VoltageL3
};
enum class Kamstrup_List2
enum class Kamstrup_List3Phase
{
ListSize,
ListVersionIdentifier,
@@ -83,29 +52,7 @@ enum class Kamstrup_List2
CumulativeReactiveExportEnergy
};
enum class Kamstrup_List3
{
ListSize,
ListVersionIdentifier,
MeterID_OBIS,
MeterID,
MeterType_OBIS,
MeterType,
ActiveImportPower_OBIS,
ActiveImportPower,
ActiveExportPower_OBIS,
ActiveExportPower,
ReactiveImportPower_OBIS,
ReactiveImportPower,
ReactiveExportPower_OBIS,
ReactiveExportPower,
CurrentL1_OBIS,
CurrentL1,
VoltageL1_OBIS,
VoltageL1
};
enum class Kamstrup_List4
enum class Kamstrup_List1Phase
{
ListSize,
ListVersionIdentifier,

View File

@@ -6,49 +6,49 @@
static void hanToJsonKaifa3phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger)
{
if (listSize >= (int)Kaifa::List2)
if (listSize >= (int)Kaifa::List3PhaseShort)
{
data["lv"] = hanReader.getString( (int)Kaifa_List3::ListVersionIdentifier);
data["id"] = hanReader.getString( (int)Kaifa_List3::MeterID);
data["type"] = hanReader.getString( (int)Kaifa_List3::MeterType);
data["P"] = hanReader.getInt( (int)Kaifa_List3::ActiveImportPower);
data["Q"] = hanReader.getInt( (int)Kaifa_List3::ReactiveImportPower);
data["I1"] = hanReader.getInt( (int)Kaifa_List3::CurrentL1);
data["I2"] = hanReader.getInt( (int)Kaifa_List3::CurrentL2);
data["I3"] = hanReader.getInt( (int)Kaifa_List3::CurrentL3);
data["U1"] = hanReader.getInt( (int)Kaifa_List3::VoltageL1);
data["U2"] = hanReader.getInt( (int)Kaifa_List3::VoltageL2);
data["U3"] = hanReader.getInt( (int)Kaifa_List3::VoltageL3);
data["lv"] = hanReader.getString( (int)Kaifa_List3Phase::ListVersionIdentifier);
data["id"] = hanReader.getString( (int)Kaifa_List3Phase::MeterID);
data["type"] = hanReader.getString( (int)Kaifa_List3Phase::MeterType);
data["P"] = hanReader.getInt( (int)Kaifa_List3Phase::ActiveImportPower);
data["Q"] = hanReader.getInt( (int)Kaifa_List3Phase::ReactiveImportPower);
data["I1"] = hanReader.getInt( (int)Kaifa_List3Phase::CurrentL1);
data["I2"] = hanReader.getInt( (int)Kaifa_List3Phase::CurrentL2);
data["I3"] = hanReader.getInt( (int)Kaifa_List3Phase::CurrentL3);
data["U1"] = hanReader.getInt( (int)Kaifa_List3Phase::VoltageL1);
data["U2"] = hanReader.getInt( (int)Kaifa_List3Phase::VoltageL2);
data["U3"] = hanReader.getInt( (int)Kaifa_List3Phase::VoltageL3);
}
if (listSize >= (int)Kaifa::List3)
if (listSize >= (int)Kaifa::List3PhaseLong)
{
data["tPI"] = hanReader.getInt( (int)Kaifa_List3::CumulativeActiveImportEnergy);
data["tPO"] = hanReader.getInt( (int)Kaifa_List3::CumulativeActiveExportEnergy);
data["tQI"] = hanReader.getInt( (int)Kaifa_List3::CumulativeReactiveImportEnergy);
data["tQO"] = hanReader.getInt( (int)Kaifa_List3::CumulativeReactiveExportEnergy);
data["tPI"] = hanReader.getInt( (int)Kaifa_List3Phase::CumulativeActiveImportEnergy);
data["tPO"] = hanReader.getInt( (int)Kaifa_List3Phase::CumulativeActiveExportEnergy);
data["tQI"] = hanReader.getInt( (int)Kaifa_List3Phase::CumulativeReactiveImportEnergy);
data["tQO"] = hanReader.getInt( (int)Kaifa_List3Phase::CumulativeReactiveExportEnergy);
}
}
static void hanToJsonKaifa1phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger)
{
if (listSize >= (int)Kaifa::List21)
if (listSize >= (int)Kaifa::List1PhaseShort)
{
data["lv"] = hanReader.getString( (int)Kaifa_List31::ListVersionIdentifier);
data["id"] = hanReader.getString( (int)Kaifa_List31::MeterID);
data["type"] = hanReader.getString( (int)Kaifa_List31::MeterType);
data["P"] = hanReader.getInt( (int)Kaifa_List31::ActiveImportPower);
data["Q"] = hanReader.getInt( (int)Kaifa_List31::ReactiveImportPower);
data["I1"] = hanReader.getInt( (int)Kaifa_List31::CurrentL1);
data["U1"] = hanReader.getInt( (int)Kaifa_List31::VoltageL1);
data["lv"] = hanReader.getString( (int)Kaifa_List1Phase::ListVersionIdentifier);
data["id"] = hanReader.getString( (int)Kaifa_List1Phase::MeterID);
data["type"] = hanReader.getString( (int)Kaifa_List1Phase::MeterType);
data["P"] = hanReader.getInt( (int)Kaifa_List1Phase::ActiveImportPower);
data["Q"] = hanReader.getInt( (int)Kaifa_List1Phase::ReactiveImportPower);
data["I1"] = hanReader.getInt( (int)Kaifa_List1Phase::CurrentL1);
data["U1"] = hanReader.getInt( (int)Kaifa_List1Phase::VoltageL1);
}
if (listSize >= (int)Kaifa::List31)
if (listSize >= (int)Kaifa::List1PhaseLong)
{
data["tPI"] = hanReader.getInt( (int)Kaifa_List31::CumulativeActiveImportEnergy);
data["tPO"] = hanReader.getInt( (int)Kaifa_List31::CumulativeActiveExportEnergy);
data["tQI"] = hanReader.getInt( (int)Kaifa_List31::CumulativeReactiveImportEnergy);
data["tQO"] = hanReader.getInt( (int)Kaifa_List31::CumulativeReactiveExportEnergy);
data["tPI"] = hanReader.getInt( (int)Kaifa_List1Phase::CumulativeActiveImportEnergy);
data["tPO"] = hanReader.getInt( (int)Kaifa_List1Phase::CumulativeActiveExportEnergy);
data["tQI"] = hanReader.getInt( (int)Kaifa_List1Phase::CumulativeReactiveImportEnergy);
data["tQO"] = hanReader.getInt( (int)Kaifa_List1Phase::CumulativeReactiveExportEnergy);
}
}
@@ -64,11 +64,11 @@ static void hanToJsonKaifa(JsonObject& data, HanReader& hanReader, Stream *debug
}
switch (listSize) {
case (int)Kaifa::List2:
case (int)Kaifa::List3:
case (int)Kaifa::List3PhaseShort:
case (int)Kaifa::List3PhaseLong:
return hanToJsonKaifa3phase(listSize, data, hanReader, debugger);
case (int)Kaifa::List21:
case (int)Kaifa::List31:
case (int)Kaifa::List1PhaseShort:
case (int)Kaifa::List1PhaseLong:
return hanToJsonKaifa1phase(listSize, data, hanReader, debugger);
default:
if (debugger) debugger->printf("Warning: Unknown listSize %d\n", listSize);
@@ -76,6 +76,51 @@ static void hanToJsonKaifa(JsonObject& data, HanReader& hanReader, Stream *debug
}
}
static void hanToJsonAidon3phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger)
{
if (listSize >= (int)Aidon::List3PhaseShort)
{
data["lv"] = hanReader.getString( (int)Aidon_List3Phase::ListVersionIdentifier);
data["id"] = hanReader.getString( (int)Aidon_List3Phase::MeterID);
data["type"] = hanReader.getString( (int)Aidon_List3Phase::MeterType);
data["P"] = hanReader.getInt( (int)Aidon_List3Phase::ActiveImportPower);
data["Q"] = hanReader.getInt( (int)Aidon_List3Phase::ReactiveExportPower);
data["I1"] = ((double) hanReader.getInt( (int)Aidon_List3Phase::CurrentL1)) / 10;
data["I2"] = ((double) hanReader.getInt( (int)Aidon_List3Phase::CurrentL2)) / 10;
data["I3"] = ((double) hanReader.getInt( (int)Aidon_List3Phase::CurrentL3)) / 10;
data["U1"] = ((double) hanReader.getInt( (int)Aidon_List3Phase::VoltageL1)) / 10;
data["U2"] = ((double) hanReader.getInt( (int)Aidon_List3Phase::VoltageL2)) / 10;
data["U3"] = ((double) hanReader.getInt( (int)Aidon_List3Phase::VoltageL3)) / 10;
}
if (listSize >= (int)Aidon::List3PhaseShort)
{
data["tPI"] = hanReader.getInt( (int)Aidon_List3Phase::CumulativeActiveImportEnergy);
data["tPO"] = hanReader.getInt( (int)Aidon_List3Phase::CumulativeActiveExportEnergy);
data["tQI"] = hanReader.getInt( (int)Aidon_List3Phase::CumulativeReactiveImportEnergy);
data["tQO"] = hanReader.getInt( (int)Aidon_List3Phase::CumulativeReactiveExportEnergy);
}
// TODO Aidon::List3PhaseLong
// TODO: Do not divide Aidon values by 10!
}
static void hanToJsonAidon1phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger)
{
if (listSize >= (int)Aidon::List1PhaseShort)
{
data["lv"] = hanReader.getString( (int)Aidon_List1Phase::ListVersionIdentifier);
data["id"] = hanReader.getString( (int)Aidon_List1Phase::MeterID);
data["type"] = hanReader.getString( (int)Aidon_List1Phase::MeterType);
data["P"] = hanReader.getInt( (int)Aidon_List1Phase::ActiveImportPower);
data["Q"] = hanReader.getInt( (int)Aidon_List1Phase::ReactiveExportPower);
data["I1"] = ((double) hanReader.getInt( (int)Aidon_List1Phase::CurrentL1)) / 10;
data["U1"] = ((double) hanReader.getInt( (int)Aidon_List1Phase::VoltageL1)) / 10;
}
}
static void hanToJsonAidon(JsonObject& data, HanReader& hanReader, Stream *debugger)
{
int listSize = hanReader.getListSize();
@@ -89,79 +134,64 @@ static void hanToJsonAidon(JsonObject& data, HanReader& hanReader, Stream *debug
return;
}
if (listSize >= (int)Aidon::List21)
{
data["lv"] = hanReader.getString( (int)Aidon_List3::ListVersionIdentifier);
data["id"] = hanReader.getString( (int)Aidon_List3::MeterID);
data["type"] = hanReader.getString( (int)Aidon_List3::MeterType);
data["P"] = hanReader.getInt( (int)Aidon_List3::ActiveImportPower);
data["Q"] = hanReader.getInt( (int)Aidon_List3::ReactiveExportPower);
data["I1"] = ((double) hanReader.getInt( (int)Aidon_List3::CurrentL1)) / 10;
data["I2"] = ((double) hanReader.getInt( (int)Aidon_List3::CurrentL2)) / 10;
}
if (listSize >= (int)Aidon::List2)
{
data["I3"] = ((double) hanReader.getInt( (int)Aidon_List3::CurrentL3)) / 10;
data["U1"] = ((double) hanReader.getInt( (int)Aidon_List3::VoltageL1)) / 10;
data["U2"] = ((double) hanReader.getInt( (int)Aidon_List3::VoltageL2)) / 10;
data["U3"] = ((double) hanReader.getInt( (int)Aidon_List3::VoltageL3)) / 10;
}
if (listSize >= (int)Aidon::List3)
{
data["tPI"] = hanReader.getInt( (int)Aidon_List3::CumulativeActiveImportEnergy);
data["tPO"] = hanReader.getInt( (int)Aidon_List3::CumulativeActiveExportEnergy);
data["tQI"] = hanReader.getInt( (int)Aidon_List3::CumulativeReactiveImportEnergy);
data["tQO"] = hanReader.getInt( (int)Aidon_List3::CumulativeReactiveExportEnergy);
switch (listSize) {
case (int)Aidon::List3PhaseShort:
case (int)Aidon::List3PhaseLong:
return hanToJsonAidon3phase(listSize, data, hanReader, debugger);
case (int)Aidon::List1PhaseShort:
case (int)Aidon::List1PhaseLong:
return hanToJsonAidon1phase(listSize, data, hanReader, debugger);
default:
if (debugger) debugger->printf("Warning: Unknown listSize %d\n", listSize);
return;
}
}
static void hanToJsonKamstrup3phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger)
{
if (listSize >= (int)Kamstrup::List1)
if (listSize >= (int)Kamstrup::List3PhaseShort)
{
data["lv"] = hanReader.getString( (int)Kamstrup_List2::ListVersionIdentifier);
data["id"] = hanReader.getString( (int)Kamstrup_List2::MeterID);
data["type"] = hanReader.getString( (int)Kamstrup_List2::MeterType);
data["P"] = hanReader.getInt( (int)Kamstrup_List2::ActiveImportPower);
data["Q"] = hanReader.getInt( (int)Kamstrup_List2::ReactiveImportPower);
data["I1"] = hanReader.getInt( (int)Kamstrup_List2::CurrentL1);
data["I2"] = hanReader.getInt( (int)Kamstrup_List2::CurrentL2);
data["I3"] = hanReader.getInt( (int)Kamstrup_List2::CurrentL3);
data["U1"] = hanReader.getInt( (int)Kamstrup_List2::VoltageL1);
data["U2"] = hanReader.getInt( (int)Kamstrup_List2::VoltageL2);
data["U3"] = hanReader.getInt( (int)Kamstrup_List2::VoltageL3);
data["lv"] = hanReader.getString( (int)Kamstrup_List3Phase::ListVersionIdentifier);
data["id"] = hanReader.getString( (int)Kamstrup_List3Phase::MeterID);
data["type"] = hanReader.getString( (int)Kamstrup_List3Phase::MeterType);
data["P"] = hanReader.getInt( (int)Kamstrup_List3Phase::ActiveImportPower);
data["Q"] = hanReader.getInt( (int)Kamstrup_List3Phase::ReactiveImportPower);
data["I1"] = hanReader.getInt( (int)Kamstrup_List3Phase::CurrentL1);
data["I2"] = hanReader.getInt( (int)Kamstrup_List3Phase::CurrentL2);
data["I3"] = hanReader.getInt( (int)Kamstrup_List3Phase::CurrentL3);
data["U1"] = hanReader.getInt( (int)Kamstrup_List3Phase::VoltageL1);
data["U2"] = hanReader.getInt( (int)Kamstrup_List3Phase::VoltageL2);
data["U3"] = hanReader.getInt( (int)Kamstrup_List3Phase::VoltageL3);
}
if (listSize >= (int)Kamstrup::List2)
if (listSize >= (int)Kamstrup::List3PhaseLong)
{
data["tPI"] = hanReader.getInt( (int)Kamstrup_List2::CumulativeActiveImportEnergy);
data["tPO"] = hanReader.getInt( (int)Kamstrup_List2::CumulativeActiveExportEnergy);
data["tQI"] = hanReader.getInt( (int)Kamstrup_List2::CumulativeReactiveImportEnergy);
data["tQO"] = hanReader.getInt( (int)Kamstrup_List2::CumulativeReactiveExportEnergy);
data["tPI"] = hanReader.getInt( (int)Kamstrup_List3Phase::CumulativeActiveImportEnergy);
data["tPO"] = hanReader.getInt( (int)Kamstrup_List3Phase::CumulativeActiveExportEnergy);
data["tQI"] = hanReader.getInt( (int)Kamstrup_List3Phase::CumulativeReactiveImportEnergy);
data["tQO"] = hanReader.getInt( (int)Kamstrup_List3Phase::CumulativeReactiveExportEnergy);
}
}
static void hanToJsonKamstrup1phase(int listSize, JsonObject& data, HanReader& hanReader, Stream *debugger)
{
if (listSize >= (int)Kamstrup::List3)
if (listSize >= (int)Kamstrup::List1PhaseShort)
{
data["lv"] = hanReader.getString( (int)Kamstrup_List4::ListVersionIdentifier);
data["id"] = hanReader.getString( (int)Kamstrup_List4::MeterID);
data["type"] = hanReader.getString( (int)Kamstrup_List4::MeterType);
data["P"] = hanReader.getInt( (int)Kamstrup_List4::ActiveImportPower);
data["Q"] = hanReader.getInt( (int)Kamstrup_List4::ReactiveImportPower);
data["I1"] = hanReader.getInt( (int)Kamstrup_List4::CurrentL1);
data["U1"] = hanReader.getInt( (int)Kamstrup_List4::VoltageL1);
data["lv"] = hanReader.getString( (int)Kamstrup_List1Phase::ListVersionIdentifier);
data["id"] = hanReader.getString( (int)Kamstrup_List1Phase::MeterID);
data["type"] = hanReader.getString( (int)Kamstrup_List1Phase::MeterType);
data["P"] = hanReader.getInt( (int)Kamstrup_List1Phase::ActiveImportPower);
data["Q"] = hanReader.getInt( (int)Kamstrup_List1Phase::ReactiveImportPower);
data["I1"] = hanReader.getInt( (int)Kamstrup_List1Phase::CurrentL1);
data["U1"] = hanReader.getInt( (int)Kamstrup_List1Phase::VoltageL1);
}
if (listSize >= (int)Kamstrup::List4)
if (listSize >= (int)Kamstrup::List1PhaseLong)
{
data["tPI"] = hanReader.getInt( (int)Kamstrup_List4::CumulativeActiveImportEnergy);
data["tPO"] = hanReader.getInt( (int)Kamstrup_List4::CumulativeActiveExportEnergy);
data["tQI"] = hanReader.getInt( (int)Kamstrup_List4::CumulativeReactiveImportEnergy);
data["tQO"] = hanReader.getInt( (int)Kamstrup_List4::CumulativeReactiveExportEnergy);
data["tPI"] = hanReader.getInt( (int)Kamstrup_List1Phase::CumulativeActiveImportEnergy);
data["tPO"] = hanReader.getInt( (int)Kamstrup_List1Phase::CumulativeActiveExportEnergy);
data["tQI"] = hanReader.getInt( (int)Kamstrup_List1Phase::CumulativeReactiveImportEnergy);
data["tQO"] = hanReader.getInt( (int)Kamstrup_List1Phase::CumulativeReactiveExportEnergy);
}
}
@@ -170,11 +200,11 @@ static void hanToJsonKamstrup(JsonObject& data, HanReader& hanReader, Stream *de
int listSize = hanReader.getListSize();
switch (listSize) {
case (int)Kamstrup::List1:
case (int)Kamstrup::List2:
case (int)Kamstrup::List3PhaseShort:
case (int)Kamstrup::List3PhaseLong:
return hanToJsonKamstrup3phase(listSize, data, hanReader, debugger);
case (int)Kamstrup::List3:
case (int)Kamstrup::List4:
case (int)Kamstrup::List1PhaseShort:
case (int)Kamstrup::List1PhaseLong:
return hanToJsonKamstrup1phase(listSize, data, hanReader, debugger);
default:
if (debugger) debugger->printf("Warning: Unknown listSize %d\n", listSize);