---
# System prepended metadata

title: GuruxDLMS.c Client
tags: [work]

---

###### tags: `work`

# GuruxDLMS.c Client

## client init
```cpp
# GuruxDLMS.c/development/src/dlmsSettings.c
void cl_init(
    dlmsSettings* settings,
    unsigned char useLogicalNameReferencing,
    uint16_t clientAddress,
    uint32_t serverAddress,
    DLMS_AUTHENTICATION authentication,
    const char* password,
    DLMS_INTERFACE_TYPE interfaceType)
{

# main.c
cl_init(&con.settings, 1, 16, 1, DLMS_AUTHENTICATION_NONE, NULL, DLMS_INTERFACE_TYPE_HDLC);


# others
settings->dlmsVersionNumber = 6;
```

```cpp
# GuruxDLMS.c/development/src/client.c
if (settings->authentication != DLMS_AUTHENTICATION_HIGH_ECDSA &&
        settings->authentication != DLMS_AUTHENTICATION_HIGH_GMAC &&
        settings->password.size == 0) {}
if (settings->authentication == DLMS_AUTHENTICATION_HIGH_GMAC)

# 沒有 DLMS_AUTHENTICATION_HIGH_ECDSA)
```

```cpp
# GuruxDLMS.c/development/src/dlms.c
if (settings->authentication == DLMS_AUTHENTICATION_HIGH_SHA256)
{}
```

```cpp
# GuruxDLMS.c/development/src/gxaes.c

# default AES128
#define BLOCKLEN 16 //Block length in bytes AES is 128b block only

void gxaes_cbc_encrypt(unsigned char* output, unsigned char* input, uint32_t length, const unsigned char* key, const unsigned char* iv)
{}

void gxaes_ecb_encrypt(const unsigned char* input, const unsigned char* key, unsigned char* output, const size_t length)
{}

```


```cpp
/*Read DLMS meter using serial port connection.*/
int readSerialPort(
    connection* connection,
    const char* port,
    unsigned char iec,
    char* readObjects,
    char* invocationCounter)
    {
        ret = com_open(connection, port, iec);
        ...
    }
    
/*Read DLMS meter using TCP/IP connection.*/
int readTcpIpConnection(
    connection* connection,
    const char* address,
    const int port,
    char* readObjects,
    const char* invocationCounter)
    {
        //Make connection to the meter.
        ret = com_makeConnect(connection, address, port, 5000);
    }
  


```