summaryrefslogtreecommitdiffstats
path: root/dvb-t/pt-Lisbon
blob: 0ca5b09eaec589fd44f3275d2c50e51d414cd280 (plain)
1
2
3
# DVB-T Lisbon, Portugal - TDT Continente
# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy
T 754000000 8MHz 2/3 NONE QAM_64 8k 1/4 NONE # MPEG-4/H.264
n208' href='#n208'>208 209 210
/* 
 * modbuslog
 *
 * Copyright (C) 2011 Jonathan McCrohan
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

// gcc modbuslog.c -o modbuslog `pkg-config --libs --cflags libmodbus libconfig`


#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <time.h>
#include <unistd.h>
#include <sys/select.h>
#include <signal.h>

#include <libconfig.h>
#include <modbus.h>

#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <string.h>

#define SLAVE_ID 1
#define START_ADDRESS 0
#define NUMBER_REGISTERS 14
#define DEBUG 1

void minute_check(int signum){
 alarm(60);
}

void getmac(unsigned char* mac_address){
    int s;
    struct ifreq ifr;

    s = socket(PF_INET, SOCK_DGRAM, 0);
    memset(&ifr, 0x00, sizeof(ifr));
    strcpy(ifr.ifr_name, "eth0");
    ioctl(s, SIOCGIFHWADDR, &ifr);
    close(s);

    unsigned char mac_address_internal[6];
    sprintf(mac_address_internal,"%.2X%.2X%.2X%.2X%.2X%.2X", (unsigned char) ifr.ifr_hwaddr.sa_data[0], (unsigned char) ifr.ifr_hwaddr.sa_data[1], (unsigned char) ifr.ifr_hwaddr.sa_data[2], (unsigned char) ifr.ifr_hwaddr.sa_data[3], (unsigned char) ifr.ifr_hwaddr.sa_data[4], (unsigned char) ifr.ifr_hwaddr.sa_data[5]);

    strcpy(mac_address,mac_address_internal);
}



int main(int argc, char *argv[])
{

 const char *CONFIG_FILE = "modbuslog.cfg";

 config_t cfg;
 //config_setting_t *setting;

 //unsigned char* mac_address;
 unsigned char mac_address[6]; 

 const char *modbus_device_address;
 int modbus_baud_rate;
 int modbus_data_bits;
 const char *modbus_parity;
 int modbus_stop_bits;

 config_init(&cfg);

 getmac(mac_address);
 if(DEBUG){
printf("%s\n",mac_address);
}

  if(!config_read_file(&cfg, CONFIG_FILE))
  {
    fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg),
            config_error_line(&cfg), config_error_text(&cfg));
    config_destroy(&cfg);
    fprintf(stderr, "Unable to find CONFIG_FILE.\n");
    return -1;
  }

 if(!(config_lookup_string(&cfg, "modbus.device", &modbus_device_address)
	&& config_lookup_int(&cfg, "modbus.baud", &modbus_baud_rate)
	&& config_lookup_int(&cfg, "modbus.data_bits", &modbus_data_bits)
	&& config_lookup_string(&cfg, "modbus.parity", &modbus_parity)
	&& config_lookup_int(&cfg, "modbus.stop_bits", &modbus_stop_bits))
){
	fprintf(stderr, "Incomplete modbus configuration. Check configuration file.\n");
	return -1;
}

 if(DEBUG){
  printf("%s %d %c %d %d\n",modbus_device_address, modbus_baud_rate, modbus_parity[0], modbus_data_bits, modbus_stop_bits);
 }


 modbus_t *ctx;
 uint16_t tab_reg[64];
 int rc;
 int i;


 signal(SIGALRM, minute_check);
 alarm(60);

 for (;;){
  select(0, NULL, NULL, NULL, NULL);

  time_t t = time(NULL);
  int unixtime_min = (((int) t)/60*60);
  //int unixtime = (int) t;
  //printf("%d\n", unixtime);
  
  config_setting_t *registers;

  registers = config_lookup(&cfg, "register");

  unsigned int num_registers = config_setting_length(registers);

  int i;
  for(i = 0; i < num_registers; ++i){
   config_setting_t *register_element = config_setting_get_elem(registers, i);
   int slaveid;
   config_setting_lookup_int(register_element, "slaveid", &slaveid);
   int intervalvalue;
   config_setting_lookup_int(register_element, "intervalvalue", &intervalvalue);
   printf("%d", intervalvalue);

   const char *intervalunit;
   config_setting_lookup_string(register_element, "intervalunit", &intervalunit);

   printf("%c", intervalunit[0]);

   int intervalduration;

   if(intervalunit[0]=='H')
	intervalduration=intervalvalue*3600;
   else
	intervalduration=intervalvalue*60;

   if(unixtime_min%intervalduration==0){
	printf("specified minute.  %d %d\n", unixtime_min, intervalduration);
   }

   printf("%d ", slaveid);
  }
  printf("%d\n",unixtime_min);
 }
}


/*

ctx = modbus_new_rtu(modbus_device_address, modbus_baud_rate, modbus_parity[0], modbus_data_bits, modbus_stop_bits);

modbus_set_slave(ctx, SLAVE_ID);
modbus_set_debug(ctx, DEBUG);

if (ctx == NULL) {
    fprintf(stderr, "Unable to create libmodbus object.\n");
    return -1;
}


if (modbus_connect(ctx) == -1) {
    fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
    modbus_free(ctx);
    return -1;
}

rc = modbus_read_input_registers(ctx, START_ADDRESS, NUMBER_REGISTERS, tab_reg);


if (rc == -1) {
    fprintf(stderr, "ERROR: %s\n", modbus_strerror(errno));
    return -1;
}


for (i=0; i < rc; i=i+2) {
    printf("reg[%d]=%d\n", i, tab_reg[i]+tab_reg[i+1]);
}


modbus_close(ctx);
modbus_free(ctx);

    return 0;
}

*/