
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <modbus.h>

#define SHR_1700_DIO_REG          0x79
#define SHR_1700_TEMP_CFG_REG     0x7a

uint16_t Temperature1700, Dio1700;

int main()
{
    printf("This is the TS-1700 Modbus device operatoin condifuration snippet\n");
    return 0;
}

int16_t SetHoldingRegister(modbus_t *theConnection, uint32_t theAddress, uint16_t theData)
{
    int rtnStatus = modbus_write_register(theConnection, theAddress, theData);

    if (rtnStatus < 0)
        printf("Error writing %04x to register: %x\nErrno: %d - %s\n", theData, theAddress,  errno, modbus_strerror(errno));

    return rtnStatus;
}

//
//  Example configuration function for the TS-1700 operation configuration
//  Note that this is different than the commmunications configration
//
//  Set1700Configuration
//
//  Arguments - uint8_t *ConfigurationString 
//
//  Where - ConfigurationString is a string containing 8 characters from the
//  list:  "iIoOtT" and each letter sets the DIO on the unit to Input, Output,
//  or Temperature, with the first letter corresponding DIO Port 7 through 0
//
//  Returns: Write operation status; zero (0) if completed OK

Set1700Configuration(uint8_t *ConfigurationString)
{
    Temperature1700 = Dio1700 = 0;
    uint8_t *argsPtr = ConfigurationString;
    uint16_t Index;
    modbus_t *mbConnection;

    for (Index = 8; Index; Index--, argsPtr++)
    {
        switch (*argsPtr)
        {
            case 't':
            case 'T':
                Temperature1700 |= (1 << (Index - 1));
                break;

            case 'i':
            case 'I':
                Dio1700 |= (1 << (Index - 1));
                break;

            case 'o':
            case 'O':
                break;

            default:
                fprintf(stderr, "Invalid Temperature / DIO configuration for Model 1700: '%s'\n", ConfigurationString);
                exit(0);
        }
    }

    SetHoldingRegister(mbConnection, SHR_1700_DIO_REG, Dio1700);
    SetHoldingRegister(mbConnection, SHR_1700_TEMP_CFG_REG, Temperature1700);
}

