uint8_t slave_null_read_data(uint8_t slave_addr, uint8_t* buf, uint8_t max_len)
{
			/* limit number of registers to the max. available */
			if(max_len > sizeof(modbus_null_input_register_list))
			{
				max_len = sizeof(modbus_null_input_register_list);
			}
		
#if MODBUS_NULL_SLAVE_SIMULATION == 0				
			/* Detecta equipamentos de medição e faz a leitura dos dados */			
			NULL_IRList.Reg.Pressure_Valve = sensors_read(PRESSURE_VALVE);
			NULL_IRList.Reg.Oil_Level =  sensors_read(SENSOR_LEVEL);
			FATFS   *fs;	 /* Pointer to file system object */
			uint32_t p1;
			if (f_getfree(".", (DWORD*)&p1, &fs) == FR_OK)
			{
				NULL_IRList.Reg.SD_bytes_available = (uint32_t)(p1 * fs->csize * 512);
			}			
			NULL_IRList.Reg.Local_time = (uint32_t)simon_clock_get();
#else	
			uint8_t nregs = 0;
			/* return random data */	
			for(nregs = NULL_REGLIST_OFFSET_NREGS; nregs < (NULL_REGLIST_INPUT_NREGS+NULL_REGLIST_OFFSET_NREGS);nregs++)
			{				
				NULL_IRList.Regs16[nregs] = random_get();
			}
#endif
		
			/* get and set timestamp of reading and device id */
			SetModbusHeader(slave_addr, NULL_IRList.Regs8);	
			memcpy(buf,NULL_IRList.Regs8,max_len);						
			return (max_len);			
}
示例#2
0
int 
main (int argc, char **argv)
{
	int ch;
	/*char uptimeInfo[15], lightInfo[15], timebuf[15];*/
	/*int lightlevel;*/
	int ocontrast = 40; /* Contrast defaults to 40 */
	screen_t *sc;
	sensor_t  sensors;
	led_t	  displed;
	extern char *optarg;
	extern int optind;/*, opterr, optopt;*/


	while ((ch = getopt(argc, argv, "lDvc:")) != -1) {
		switch (ch) {
			case 'l':
				led_on_darkness=1;
				break;
			case 'D':
				dodaemon=1;
				break;
			case 'v':
				verbose_mode=1;
				break;
			case 'c':
				ocontrast = atoi(optarg);
				break;
			default:
				usage();
		}
	}
	argc -= optind;
	argv += optind;
	if (dodaemon) {
		daemon(1, 0);
	}
	openlog("pcd8544", LOG_PID|LOG_PERROR, LOG_LOCAL0);
	/* print infos */
	syslog(LOG_LOCAL0|LOG_INFO, "pilab");

  


	if ((sc = screen_init(DIN_PIN, SCLK_PIN, DC_PIN, RST_PIN, CS_PIN, ocontrast)) == NULL) {
		syslog(LOG_LOCAL0|LOG_INFO, "failed to init screen");
		err(3, "failed to init screen");
	}

	/* check wiringPi setup */
	delay(2000);
 	if (verbose_mode)
		syslog(LOG_LOCAL0|LOG_DEBUG, "initialisation of screen led");
        led_init(&displed, DISP_LED_GPIO);
 	if (verbose_mode)
		syslog(LOG_LOCAL0|LOG_DEBUG, "initialisation of screen led - bringing up");
	led_setstate(&displed, LED_UP);
  
	for (;;) {
		/* clear lcd */
		LCDclear();
	  
		if (sensors_read(&sensors) < 0)
			syslog(LOG_LOCAL0|LOG_INFO, "failed to read data from sensors");
		if (led_on_darkness) {
			if (sensors.sens_light < 50 && displed.l_state != LED_UP) {
				if (verbose_mode)
					syslog(LOG_LOCAL0|LOG_DEBUG, "bringing screen led up");
				led_setstate(&displed, LED_UP);
			} else if (sensors.sens_light > 50 && displed.l_state == LED_UP)
				led_setstate(&displed, LED_DOWN);
		}

		if (statistics_update(sc, &sensors) < 0)
			syslog(LOG_LOCAL0|LOG_INFO, "failed to update statistics");
		if (screen_include(sc) < 0)
			syslog(LOG_LOCAL0|LOG_INFO, "failed to include file line");
		/* build screen */
		screen_update(sc);
	  
		sleep(5);
	}
  return 0;
}