Ejemplo n.º 1
0
uint8_t set_preset_variable(uint8_t num) {
	if (num < 0 || num >= NUMBER_OF_PRESETS) {
		//Out of range
		return 1;
	}
	
	while(!bns[1] && (wd_clock <= 60)) {
		if(bns[0]) {
			bns[0] = false;
			presets[num] -= 2;
			if (presets[num] < SI4705_FM_LOW) presets[num] = SI4705_FM_HIGH;
			ms_clock = 0; //force a redraw, reset activity
			wd_clock = 0;
			watchdog_feed();
		}
		if(bns[2]) {
			bns[2] = false;
			presets[num] += 2;
			if (presets[num] > SI4705_FM_HIGH) presets[num] = SI4705_FM_LOW;
			ms_clock = 0; //force a redraw, reset activity
			wd_clock = 0;
			watchdog_feed();
		}
		if ((ms_clock+125)%250 == 0) {
			if (hol[0]) {
				presets[num] -= 2;
				if (presets[num] < SI4705_FM_LOW) presets[num] = SI4705_FM_HIGH;
				ms_clock = 0; //force a redraw, reset activity
				wd_clock = 0;
				watchdog_feed();
			}
			if (hol[2]) {
				presets[num] += 2;
				if (presets[num] > SI4705_FM_HIGH) presets[num] = SI4705_FM_LOW;
				ms_clock = 0; //force a redraw, reset activity
				wd_clock = 0;
				watchdog_feed();
			}
		}
		if (ms_clock%1000 == 0) {
			watchdog_entertain();
			nokia5110_gotoXY(7, num);
			snprintf(line, 12, "%d.%d  ", presets[num]/10, presets[num]%10);
			nokia5110_writeString(line);
		} else if ((ms_clock + 500)%1000 == 0 && is_fresh) {
			watchdog_entertain();
			nokia5110_gotoXY(7, num);
			nokia5110_writeString("     ");
		}
	}
	if (bns[1]) {
		eeprom_update_word(&saved_presets[num], presets[num]);
		bns[1] = false;
		wd_clock = 0;
		return 0;
	} else {
		wd_clock = 0;
		return 1;
	}
}
Ejemplo n.º 2
0
int para_rm(unsigned char type)
{
	unsigned int i,addr;
	const struct paraitf *itf;
	if((type==0)||(type>PARA_MAX))
		return -1;
	type--;
	itf = &para_interface[type];
	
	addr = itf->sbase;
	for(i=0;i<itf->ss;i++){
		addr += i;
		watchdog_feed();
		flash_sector_erase(addr);
		PrintLog(LOGTYPE_SHORT,"erase para type:%d,in sectore:%d\n",type,addr);
	}
	addr = itf->sbase+itf->ss;
	for(i=0;i<itf->ss;i++){
		addr += i;
		watchdog_feed();
		flash_sector_erase(addr);
		PrintLog(LOGTYPE_SHORT,"erase para type:%d,in sectore:%d\n",type,addr);
	}
	return 0;
}
Ejemplo n.º 3
0
void task_run(void *arg)
{
 	SysTick_init();
	mutex_init();
 	if(__init_GlobalLock()!=0)
		SysReset();
	__GlobalLock();
	platpara_init();
	printf("\r\nstart runing...\r\n");
	printf("platform make at:\033[1;31;40m%s \033[0m\r\n",MKTIME);
	printf("Sysetm \033[1;32;40m%s\033[0m start at:%s\r\n",SYSTEM_NAME,UTimeFormat(UTimeReadCurrent()));

	RunAppTask();
	while(1)
	{
		rtc_update(1);

		if(UTimeReadCurrent()%300 == 0)
			printf("\r\nTime:%s\r\n",UTimeFormat(UTimeReadCurrent()));

		watchdog_feed();
#ifdef 	BIG_CONCENT
		shining_led();
#endif
		SysCheckTaskState();
		sleep(50);

	}
}
Ejemplo n.º 4
0
/**
 * @ingroup firmware
 *
 *
 *
 * @param boot_dev
 * @param arm_m_type
 * @param atags
 * @return
 */
int notmain(uint32_t boot_dev, uint32_t arm_m_type, uint32_t atags)
{
	hardware_init();
	dmx_init();

	printf("Compiled on %s at %s\n", __DATE__, __TIME__);

	ui_start(0x00);			// User Interface
	ui_reinit();
	ui_text_line_1("DMX512 Receiver", 15);
	ui_text_line_2("Booting........", 15);

	dmx_devices_read_config();
	dmx_devices_init();

	watchdog_init();

	events_init();

	for (;;)
	{
		watchdog_feed();
		int i = 0;
		for (i = 0; i < sizeof(poll_table) / sizeof(poll_table[0]); i++)
		{
			poll_table[i].f();
		}

		events_check();
	}

	return 0;
}
Ejemplo n.º 5
0
void task_app(void *arg)
{
	(void)arg;
	
	__GlobalLock();	
	
	watchdog_feed();
 
	if(SysInit()) {
		DebugPrint(0,"system init failed!! quit\n");
		return;
	}

	watchdog_feed();

	if(ParamInit()) {
		DebugPrint(0,"param init failed!! quit\n");
		return;
	}

	watchdog_feed();

//	MonitorInit();
	RunTimeThread();

	InitCenmet();	//´®¿Ú³­±í

#ifndef TEST_PLC
	SysCreateTask(SvrCommTask,0,"Svr Comm Task",-1,TASK_GPRS_STK_SIZE,TASK_GPRS_PRIO);//uplink 300 8
#endif
#ifdef BIG_CONCENT
	InitUp485();
#endif
//	MonitorTask();
#ifdef DEFINE_PLCOMM
	PlcCommInit();
#endif
	
#ifdef TEST_PLC
	SysCreateTask(RunTestTask,0,"Test Task",0,200,25);//test 200 25
#endif
//	SysCreateTask(RunStackCheck,0,"Stack Check Task",0,200,26);//check 200 26
		TtyShellStart();
//while(1)Sleep(2000);;
}
Ejemplo n.º 6
0
static long watchdog_ioctl(struct file *file,  unsigned int cmd,  unsigned long arg) 
{
	
	if(cmd == FEED_DOG)
	{
		watchdog_feed();
	}

	return 0;
}
Ejemplo n.º 7
0
void check_periodic_timers() {
	int i;
	for (i = 0; i < (sizeof(events) / sizeof(events[0])); i++) {
		if (clock.time > events_last[i] + events[i].period) {
			events[i].f();
			events_last[i] += events[i].period;
			watchdog_feed();
		}
	}
}
Ejemplo n.º 8
0
/**
 * @ingroup main
 *
 */
inline static void events_check() {
	int i;
	const uint32_t micros_now = hardware_micros();
	for (i = 0; i < (sizeof(events) / sizeof(events[0])); i++) {
		if (micros_now > events_elapsed_time[i] + events[i].period) {
			events[i].f();
			events_elapsed_time[i] += events[i].period;
			watchdog_feed();
		}
	}
}
Ejemplo n.º 9
0
void
watchdog_init(void)
{
	// Set the timeout for the watchdog
	LPC_WDT->WDTC = WATCHDOG_TIMER_VALUE;
	
	// Enable the watchdog timer and make it cause a reset when it underflows
	LPC_WDT->WDMOD |= 0x3;
	
	watchdog_feed();
}
Ejemplo n.º 10
0
static inline void watchdog_enable(void)
{

	unsigned long wathdog_enable_pin;

	wathdog_enable_pin = watchdog->enable_pin;
	
	/* we must feed dog once watchdog enable */
	watchdog_feed();
	gpio_set_value(wathdog_enable_pin,WATCHDOG_ENABLE);
}
Ejemplo n.º 11
0
void store_iap_start(void)
{
	unsigned int i;
	//PrintLog(LOGTYPE_SHORT,"ipa save code start\n");
	for(i=FLASH_UPDATE_SECTOR_BASE;i<=FLASH_UPDATE_SECTOR_END;i++){
		watchdog_feed();
		flash_sector_erase(i);
		//printf("erase flash sector %d",i);
	}
	icount.size = 0;
	icount.records = 0;
}
Ejemplo n.º 12
0
/* Open the interlock and then stop forever.
 *
 * This is intended to be called at the end of panic() or similar.
 */
void __attribute__((noreturn)) hw_open_interlock_forever(void) {

	/* Turn off all DAC channels. */
	hw_dac_init();

	if (hw_board_rev == HW_REV_MP1) {
		/* Square wave */
		int i;
		LPC_GPIO2->FIODIR |= (1 << 8);
		while (1) {
			for (i = 0; i < 1000; i++) __NOP();
			LPC_GPIO2->FIOSET = (1 << 8);
			watchdog_feed();
			for (i = 0; i < 1000; i++) __NOP();
			LPC_GPIO2->FIOCLR = (1 << 8);
			watchdog_feed();
		}
	} else {
		/* Just do nothing */
		while (1);
	}
}
Ejemplo n.º 13
0
int main(void)
{
    led_init();
    key_init();
 // timer0_init();
    watchdog_init();

    led_on(LED0);

    /* feed dog, otherwise will reset when watchdog time expire */
    watchdog_feed();

    return 0;
}
Ejemplo n.º 14
0
int main(void) {
	system_init();
	uart_on(0, 115200, NULL);
	adc_on();

	uprintf(0, "System started\n");
	msleep(5);
	watchdog_config(&wdconf);
	uprintf(0, "Watchdog started\n");

	while (1) {
		watchdog_feed();
		chenillard(50);
		/* ADC Test */
		adc_display(LPC_ADC_NUM(0), 0);
	}
	return 0;
}
Ejemplo n.º 15
0
int main(void) {

  DMA1_Stream0->CR=0;
  DMA1_Stream1->CR=0;
  DMA1_Stream2->CR=0;
  DMA1_Stream3->CR=0;
  DMA1_Stream4->CR=0;
  DMA1_Stream5->CR=0;
  DMA1_Stream6->CR=0;
  DMA1_Stream7->CR=0;

  DMA2_Stream0->CR=0;
  DMA2_Stream1->CR=0;
  DMA2_Stream2->CR=0;
  DMA2_Stream3->CR=0;
  DMA2_Stream4->CR=0;
  DMA2_Stream5->CR=0;
  DMA2_Stream6->CR=0;
  DMA2_Stream7->CR=0;

  palClearPad(GPIOD,7); // disable USBH power

  // copy vector table
  memcpy((char *)0x20000000, (const char *)&_vectors, 0x200);
  // remap SRAM1 to 0x00000000
  SYSCFG->MEMRMP |= 0x03;

//  FMC_SDRAMDeInit(0);
//  RCC->AHB3RSTR |= 1; //RCC_AHB3RSTR_FMCRST
  RCC->AHB3ENR |= 1; //RCC_AHB3ENR_FMCEN;

//  HAL_DeInit();
//  HAL_Init();

  watchdog_feed();
  halInit();

  // float usb inputs, hope the host notices detach...
  palSetPadMode(GPIOA, 11, PAL_MODE_INPUT); palSetPadMode(GPIOA, 12, PAL_MODE_INPUT);
  // setup LEDs
  palSetPadMode(LED1_PORT,LED1_PIN,PAL_MODE_OUTPUT_PUSHPULL);
  palSetPad(LED1_PORT,LED1_PIN);
#ifdef LED2_PIN
  palSetPadMode(LED2_PORT,LED2_PIN,PAL_MODE_OUTPUT_PUSHPULL);
#endif

  chSysInit();
  watchdog_feed();
  configSDRAM();

#ifdef SERIALDEBUG
// SD2 for serial debug output
  palSetPadMode(GPIOA, 3, PAL_MODE_ALTERNATE(7) | PAL_MODE_INPUT); // RX
  palSetPadMode(GPIOA, 2, PAL_MODE_OUTPUT_PUSHPULL); // TX
  palSetPadMode(GPIOA, 2, PAL_MODE_ALTERNATE(7)); // TX
// 115200 baud
  static const SerialConfig sd2Cfg = {115200, 0, 0, 0};
  sdStart(&SD2, &sd2Cfg);
#endif

  DBGPRINTCHAR('a');

  uint32_t pbuf[16];
  SDRAM_ReadBuffer(&pbuf[0], 0 + 0x050000, 16);
  DBGPRINTCHAR('x');

  watchdog_feed();

  uint32_t *sdram32 = (uint32_t *)SDRAM_BANK_ADDR;
  uint8_t *sdram8 = (uint8_t *)SDRAM_BANK_ADDR;

  if ((sdram8[0] != 'f') || (sdram8[1] != 'l') || (sdram8[2] != 'a')
      || (sdram8[3] != 's') || (sdram8[4] != 'c') || (sdram8[5] != 'o')
      || (sdram8[6] != 'p') || (sdram8[7] != 'y')) {
    DispayAbortErr(1);
  }
  DBGPRINTCHAR('b');

  uint32_t flength = sdram32[2];
  uint32_t fcrc = sdram32[3];

  if (flength > 1 * 1024 * 1024) {
    DispayAbortErr(2);
  }

  DBGPRINTCHAR('c');

  DBGPRINTHEX(flength);

  uint32_t ccrc = CalcCRC32((uint8_t *)(SDRAM_BANK_ADDR + 0x010), flength);

  DBGPRINTCHAR('d');

  DBGPRINTHEX(ccrc);
  DBGPRINTHEX(fcrc);

  if (ccrc != fcrc) {
    DispayAbortErr(3);
  }

  DBGPRINTCHAR('e');

  // unlock sequence
  FLASH->KEYR = 0x45670123;
  FLASH->KEYR = 0xCDEF89AB;

  uint32_t i;

  for (i = 0; i < 12; i++) {
    flash_Erase_sector(i);
    LCD_drawStringN(0, 3, "Erased sector", 128);
    LCD_drawNumber3D(80, 3, i);
    refresh_LCD();
    palWritePad(LED2_PORT,LED2_PIN,1);
    chThdSleepMilliseconds(100);
    palWritePad(LED2_PORT,LED2_PIN,0);
    DBGPRINTCHAR('f');
    DBGPRINTHEX(i);
  }

  DBGPRINTCHAR('g');

  DBGPRINTHEX(flength);

  ccrc = CalcCRC32((uint8_t *)(SDRAM_BANK_ADDR + 0x010), flength);

  DBGPRINTCHAR('h');

  DBGPRINTHEX(ccrc);
  DBGPRINTHEX(fcrc);

  if (ccrc != fcrc) {
    DispayAbortErr(4);
  }

  DBGPRINTCHAR('i');

  int destptr = FLASH_BASE_ADDR; // flash base adress
  uint32_t *srcptr = (uint32_t *)(SDRAM_BANK_ADDR + 0x010); // sdram base adress + header offset

  for (i = 0; i < (flength + 3) / 4; i++) {
    uint32_t d = *srcptr;
    flash_ProgramWord(destptr, d);
    if ((FLASH->SR != 0) && (FLASH->SR != 1)) {
      DBGPRINTCHAR('z');
      DBGPRINTHEX(FLASH->SR);
    }
//    DBGPRINTHEX(f);
    if ((i & 0xFFF) == 0) {
      palWritePad(LED2_PORT,LED2_PIN,1);
      chThdSleepMilliseconds(100); palWritePad(LED2_PORT,LED2_PIN,0);
      DBGPRINTCHAR('j');
      DBGPRINTHEX(destptr);
      DBGPRINTHEX(*(srcptr));
    }
    destptr += 4;
    srcptr++;
  }

  DBGPRINTCHAR('k');

  ccrc = CalcCRC32((uint8_t *)(FLASH_BASE_ADDR), flength);

  DBGPRINTCHAR('l');

  DBGPRINTHEX(ccrc);
  DBGPRINTHEX(fcrc);

  if (ccrc != fcrc) {
    DispayAbortErr(5);
  }

  DBGPRINTCHAR('\r');
  DBGPRINTCHAR('\n');
  DBGPRINTCHAR('S');
  DBGPRINTCHAR('U');
  DBGPRINTCHAR('C');
  DBGPRINTCHAR('C');
  DBGPRINTCHAR('E');
  DBGPRINTCHAR('S');
  DBGPRINTCHAR('S');
  DBGPRINTCHAR('\r');
  DBGPRINTCHAR('\n');

  chThdSleepMilliseconds(1000);
  NVIC_SystemReset();
  return 0;
}
Ejemplo n.º 16
0
int main(int argc, char **argv) {
	__disable_irq();

	LPC_GPIO2->FIODIR &= ~(1 << 8);
	LPC_SC->PCLKSEL0 = PCLKSEL0_INIT_VALUE;
	LPC_SC->PCLKSEL1 = PCLKSEL1_INIT_VALUE;
	LPC_SC->PCONP = PCONP_INIT_VALUE;
	clock_init();
	serial_init();

	/* Enable bus, usage, and mem faults. */
	SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk | SCB_SHCSR_BUSFAULTENA_Msk
		| SCB_SHCSR_USGFAULTENA_Msk;

#if 0
	/* Disable write buffers. This is useful for debugging - wild writes
	 * are imprecise exceptions unless the Cortex's write buffering is
	 * disabled. However, this has a significant performance hit, so it
	 * should only be set if necessary. */
	*((uint32_t *)0xE000E008) |= (1<<1);
#endif

	debugf("\r\n###############\r\n");
	debugf("# Ether Dream #\r\n");
	debugf("###############\r\n");
	debugf("Firmware: %s\r\n", build);

	debugf("RSID: %d\r\n", LPC_SC->RSID);
	LPC_SC->RSID = 0xF;

	hw_get_board_rev();
	debugf("Hardware Revision %d\n", hw_board_rev);

	debugf("Starting up: led");
	led_init();
	led_set_frontled(1);

	debugf(" skub");
	skub_init();

	debugf(" lwip\r\n");
	lwip_init();

	clock.time = 0;
	clock.mtime = 0;
	SysTick_Config(SystemCoreClock / 10000);

	/* Initialize hardware */
	FPA_init();

	outputf("Entering main loop...");
	watchdog_init();

	/* Startup might have taken some time, so reset the periodic event
	 * timers. */
	int i;
	for (i = 0; i < (sizeof(events) / sizeof(events[0])); i++) {
		events_last[i] = events[i].start + clock.time;
	}

	__enable_irq();

	playback_set_src(SRC_NETWORK);

	/* Default values */
	dac_set_rate(30000);
	ilda_set_fps_limit(30);

	while (1) {
		watchdog_feed();

		/* Check the stuff we check on each loop iteration. */
		for (i = 0; i < TABLE_LENGTH(poll); i++) {
			poll_table[i].f();
		}

		/* Check for periodic events */
		check_periodic_timers();

		if (f0ad_flag) {
			/* Re-enter the bootloader. */
			outputf("Reentering bootloader...");
			dac_stop(0);
			FORCE_BOOTLOAD_FLAG = FORCE_BOOTLOAD_VALUE;
			__disable_irq();

			/* The watchdog timer will kick us soon... */
			while(1);
		}
	}
}
Ejemplo n.º 17
0
void main(void)
{ 
	unsigned char n,cmd,tasterpegel=0;
	signed char cal;
//	unsigned int m;
	static __code signed char __at 0x1BFF trimsave;
#ifdef zeroswitch
	static __code unsigned char __at 0x1BFE phisave={16};
#endif
	unsigned char rm_count=0;
	__bit wduf,tastergetoggelt=0;

	wduf=WDCON&0x02;
	restart_hw();							// Hardware zuruecksetzen
// im folgendem wird der watchdof underflow abgefragt und mit gedrücktem Progtaster
// ein resetten der cal Variable veranlasst um wieder per rs232 trimmen zu können.	
	TASTER=1;
	if(!TASTER && wduf)cal=0;
	else cal=trimsave;
	TASTER=0;
	TRIM = (TRIM+trimsave);
	TRIM &= 0x3F;//oberen 2 bits ausblenden
#ifdef zeroswitch
	if(phisave<=52)	phival=phisave;
	else phival=16;
#endif
	TR0=1;
	if (!wduf){// BUS return verzögerung nur wenn nicht watchdog underflow
		for (n=0;n<50;n++) {		// Warten bis Bus stabil
			TR0=0;					// Timer 0 anhalten
			TH0=eeprom[ADDRTAB+1];	// Timer 0 setzen mit phys. Adr. damit Geräte unterschiedlich beginnen zu senden
			TL0=eeprom[ADDRTAB+2];
			TF0=0;					// Überlauf-Flag zurücksetzen
			TR0=1;					// Timer 0 starten
			while(!TF0);
		}
	}
	watchdog_init();
	watchdog_start();
	restart_app();							// Anwendungsspezifische Einstellungen zuruecksetzen
	if(!wduf)bus_return();							// Aktionen bei Busspannungswiederkehr
	//...rs_init...(6);im folgenden direkt:
/*	BRGCON&=0xFE;	// Baudrate Generator stoppen
//	P1M1&=0xFC;		// RX und TX auf bidirectional setzen
//	P1M2&=0xFC;
	SCON=0x50;		// Mode 1, receive enable
	SSTAT|=0xE0;	// TI wird am Ende des Stopbits gesetzt und Interrupt nur bei RX und double TX buffer an
	BRGCON|=0x02;	// Baudrate Generator verwenden aber noch gestoppt
	BRGR1=0x2f;	// Baudrate = cclk/((BRGR1,BRGR0)+16)
	BRGR0=0xf0;	// für 115200 0030 nehmen, autocal: 600bd= 0x2FF0
	BRGCON|=0x01;	// Baudrate Generator starten
*/
#ifndef debugmode
	RS_INIT_600
#else
	RS_INIT_115200
#endif
	SBUF=0x55;
	do  {
		watchdog_feed();

		if(APPLICATION_RUN) {	// nur wenn run-mode gesetzt

			if(RTCCON>=0x80) delay_timer();	// Realtime clock Ueberlauf
#ifndef zeroswitch
			if(TF0 && (TMOD & 0x0F)==0x01) {	// Vollstrom für Relais ausschalten und wieder PWM ein
	#ifndef SPIBISTAB
				TMOD=(TMOD & 0xF0) + 2;			// Timer 0 als PWM
				TAMOD=0x01;
				TH0=DUTY;
	#endif				
				TF0=0;
	#ifndef SPIBISTAB
				AUXR1|=0x10;	// PWM von Timer 0 auf Pin ausgeben
	#endif
				PWM=1;			// PWM Pin muss auf 1 gesetzt werden, damit PWM geht !!!
	#ifndef SPIBISTAB
		#ifndef IO_BISTAB		
				TR0=1;
		#endif
	#endif
	
	#ifdef IO_BISTAB
				P0=0;// wenn Bistabile über IO diese ausschalten
	#endif
			}
#endif
#ifdef BUS_DOWN
			if(TxD){
				bus_down();
			}
#endif			
			if (portchanged)port_schalten();	// Ausgänge schalten

			// Rückmeldungen senden
			if(rm_send) {	// wenn nichts zu senden ist keine Zeit vertrödeln
				if(rm_send & (1<<rm_count)) {
					if(send_obj_value(rm_count + 12)) {	// falls erfolgreich, dann nächste
						rm_send&=(0xFF-(1<<rm_count));
						rm_count++;
#ifdef MAX_PORTS_8
						rm_count&=0x07;
#else
						rm_count&=0x03;
#endif						
					}
				}
				else {	// RM sollte nicht gesendet werden
					rm_count++;
#ifdef MAX_PORTS_8
						rm_count&=0x07;
#else
						rm_count&=0x03;
#endif						
				}
			}
			else rm_count=0;	// Immer mal wieder auf Null setzen, damit Reihenfolge von 1 bis 8 geht


			// portbuffer flashen, Abbruch durch ext-int wird akzeptiert und später neu probiert
			// T1-int wird solange abgeschaltet, 

			if (fb_state==0 && (TH1<0XC0) && (!wait_for_ack)&& portbuffer!=eeprom[PORTSAVE]) {
				START_WRITECYCLE;
				WRITE_BYTE(0x01,PORTSAVE,portbuffer);
				STOP_WRITECYCLE;
			}
		
		}// end if(runstate...
		
		// Telegrammverarbeitung..
		if (tel_arrived || tel_sent) {
			tel_arrived=0;
			tel_sent=0;
			process_tel();
		}
		else {
			for(n=0;n<100;n++);	// falls Hauptroutine keine Zeit verbraucht, der PROG LED etwas Zeit geben, damit sie auch leuchten kann
		}
		cmd;
#ifndef debugmode		
		// Eingehendes Terminal Kommando verarbeiten...
		if (RI){
			RI=0;
			cmd=SBUF;

			if(cmd=='c'){
				while(!TI);
				TI=0;
				SBUF=0x55;
			}
			if(cmd=='+'){
				TRIM--;
				cal--;
			}
			if(cmd=='-'){
				TRIM++;
				cal++;
			}
			if(cmd=='w'){
				EA=0;
				START_WRITECYCLE;	//cal an 0x1bff schreiben
#ifdef zeroswitch
				FMADRH= 0x1B;		
				FMADRL= 0xFE; 
				FMDATA= phival;
#else
				FMADRH= 0x1B;		
				FMADRL= 0xFF; 
#endif
				FMDATA=	cal;
				STOP_WRITECYCLE;
				EA=1;				//int wieder freigeben
			}
			if(cmd=='p')status60^=0x81;	// Prog-Bit und Parity-Bit im system_state toggeln
#ifdef zeroswitch
			if(cmd=='<'){
				if (phival){
					phival--;
					TI=0;
					SBUF=phival;
				}
			}	
			if(cmd=='>'){
				if(phival<51){
					phival++;	// 
					TI=0;
					SBUF=phival;
				}
			}
#endif			
			if(cmd=='v'){
				while(!TI);
				TI=0;
				SBUF=VERSION;
			}
			if(cmd=='t'){
				while(!TI);
				TI=0;
				SBUF=TYPE;
			}
#ifdef MAX_PORTS_8
			if(cmd >=49 && cmd <= 56){
				portbuffer = portbuffer ^ (0x01<< (cmd-49));
				port_schalten();
			}
#else
			if(cmd >=49 && cmd <= 52){
				portbuffer = portbuffer ^ (0x01<< (cmd-49));
				port_schalten();
			}
#endif						
		}//end if(RI...
#else //ifndef debugmode
DEBUGPOINT;
#endif
		TASTER=1;				// Pin als Eingang schalten um Taster abzufragen
		if(!TASTER){ // Taster gedrückt
			if(tasterpegel<255)	tasterpegel++;
			else{
				if(!tastergetoggelt)status60^=0x81;	// Prog-Bit und Parity-Bit im system_state toggeln
				tastergetoggelt=1;
			}
		}
		else {
			if(tasterpegel>0) tasterpegel--;
			else tastergetoggelt=0;
		}
		TASTER=!(status60 & 0x01);	// LED entsprechend Prog-Bit schalten (low=LED an)

	} while(1);
}
Ejemplo n.º 18
0
uint8_t set_time_variable(CLOCK_PREFIX_t selection, time_t *input_time) {
	uint8_t value = *((uint8_t*)input_time + selection); //get the selected value from the memory address
	if (input_time == &time) { //If we're setting the clock's time
		sprintf(line, "%02d/%02d/%02d", input_time->month, input_time->day, input_time->year);
		nokia5110_gotoXY(0,1);
		nokia5110_writeString(line);
		sprintf(line, "%02d:%02d:%02d %s", input_time->hour - 12*(input_time->hour>12), input_time->minute, input_time->second, input_time->hour<12?"am":"pm");
		nokia5110_gotoXY(0,2);
		nokia5110_writeString(line);
	} else { //If we're setting an alarm time
		sprintf(line, "%02d:%02d %s", input_time->hour - 12*(input_time->hour>12), input_time->minute, input_time->hour<12?"am":"pm");
		nokia5110_gotoXY(0,2);
		nokia5110_writeString(line);
	}

	char str[] = "00";
	if (selection == days) {
		time_limits[selection] = days_in_month[input_time->month-1];
	}

	while(!bns[1] && (wd_clock <= 60)) {
		if(bns[0]) {
			bns[0] = false;
			if (selection == months || selection == days) {
				value = ((value+time_limits[selection]-2) % (time_limits[selection]) + 1);
			} else {
				value = ((value+time_limits[selection]-1) % (time_limits[selection]));
			}
			ms_clock = 0; //force a redraw, reset activity
			wd_clock = 0;
			watchdog_feed();
		}
		if(bns[2]) {
			bns[2] = false;
			if (selection == months || selection == days) {
				value = ((value % time_limits[selection]) + 1);
			} else {
				value = ((value+1) % (time_limits[selection]));
			}
			ms_clock = 0; //force a redraw, reset activity
			wd_clock = 0;
			watchdog_feed();
		}
		if ((ms_clock+125)%250 == 0) {
			if (hol[0]) {
				if (selection == months || selection == days) {
					value = ((value+time_limits[selection]-2) % (time_limits[selection]) + 1);
				} else {
					value = ((value+time_limits[selection]-1) % (time_limits[selection]));
				}
				ms_clock = 0; //force a redraw, reset activity
				wd_clock = 0;
				watchdog_feed();
			}
			if (hol[2]) {
				if (selection == months || selection == days) {
					value = ((value % time_limits[selection]) + 1);
				} else {
					value = ((value+1) % (time_limits[selection]));
				}
				ms_clock = 0; //force a redraw, reset activity
				wd_clock = 0;
				watchdog_feed();
			}
		}
		if (ms_clock%1000 == 0) {
			watchdog_entertain();
			nokia5110_gotoXY((selection%3)*21, selection/3+1);
			if (selection == hours) {
				snprintf(str, 3, "%02d", value - 12*(value>12));
				nokia5110_writeString(str);
				nokia5110_gotoXY(42 + 21*(input_time == &time), 2);
				nokia5110_writeString(value<12?"am":"pm");
			} else {
				snprintf(str, 3, "%02d", value);
				nokia5110_writeString(str);
			}
		} else if ((ms_clock + 500)%1000 == 0 && is_fresh) {
			watchdog_entertain();
			nokia5110_gotoXY((selection%3)*21, selection/3+1);
			nokia5110_writeString("  ");
		}
	}
	if (bns[1]) {
		bns[1] = false;
		wd_clock = 0;
		*((uint8_t*)input_time + selection) = value; //store the edited value in the memory address
		if (selection == days) {
			if (time.day > days_in_month[time.month - 1]) {
				input_time->day = (days_in_month[time.month - 1] - (time.month == 2 && !ds1307_isleapyear(time.year))); //don't let users send the wrong number of days
			}
		}
		if (selection == years) {
			if ( time.day > (days_in_month[time.month - 1] - (time.month == 2 && !ds1307_isleapyear(time.year))) ) {
				input_time->day = (days_in_month[time.month - 1] - (time.month == 2 && !ds1307_isleapyear(time.year))); //don't let users send the wrong number of days if it's not a leap year
			}
		}
		
		if (input_time == &time) { //If we're setting the clock's time
			sprintf(line, "%02d/%02d/%02d", input_time->month, input_time->day, input_time->year);
			nokia5110_gotoXY(0,1);
			nokia5110_writeString(line);
			sprintf(line, "%02d:%02d:%02d %s", input_time->hour - 12*(input_time->hour>12), input_time->minute, input_time->second, input_time->hour<12?"am":"pm");
			nokia5110_gotoXY(0,2);
			nokia5110_writeString(line);
		} else { //If we're setting an alarm time
			sprintf(line, "%02d:%02d %s", input_time->hour - 12*(input_time->hour>12), input_time->minute, input_time->hour<12?"am":"pm");
			nokia5110_gotoXY(0,2);
			nokia5110_writeString(line);
		}
		return 0;
	} else {
		wd_clock = 0;
		return 1;
	}
}
Ejemplo n.º 19
0
static void main_sensor_task(void* p_data, uint16_t length)
{
  // Signal mode by led color.
  if (RAWv1 == tag_mode) { RED_LED_ON; }
  else { GREEN_LED_ON; }

  int32_t  raw_t  = 0;
  uint32_t raw_p = 0;
  uint32_t raw_h = 0;
  lis2dh12_sensor_buffer_t buffer;
  int32_t acc[3] = {0};

  if (fast_advertising && ((millis() - fast_advertising_start) > ADVERTISING_STARTUP_PERIOD))
  {
    fast_advertising = false;
    bluetooth_configure_advertisement_type(APPLICATION_ADVERTISEMENT_TYPE);

    bluetooth_configure_advertising_interval(advertising_rates[tag_mode] + advertisement_delay);
    bluetooth_apply_configuration();
  }

  // If we have all the sensors.
  if (model_plus)
  {
    // Get raw environmental data.
    bme280_read_measurements();
    raw_t = bme280_get_temperature();
    raw_p = bme280_get_pressure();
    raw_h = bme280_get_humidity();

    // Get accelerometer data.
    lis2dh12_read_samples(&buffer, 1);
    acc[0] = buffer.sensor.x;
    acc[1] = buffer.sensor.y;
    acc[2] = buffer.sensor.z;
  }
  // If only temperature sensor is present.
  else
  {
    int32_t temp;                                        // variable to hold temp reading
    (void)sd_temp_get(&temp);                            // get new temperature
    temp *= 25;                                          // SD returns temp * 4. Ruuvi format expects temp * 100. 4*25 = 100.
    raw_t = (int32_t) temp;
  }

  // Embed data into structure for parsing.
  parseSensorData(&data, raw_t, raw_p, raw_h, vbat, acc);
  NRF_LOG_DEBUG("temperature: %d, pressure: %d, humidity: %d x: %d y: %d z: %d\r\n", raw_t, raw_p, raw_h, acc[0], acc[1], acc[2]);
  NRF_LOG_DEBUG("VBAT: %d send %d \r\n", vbat, data.vbat);
  // Prepare bytearray to broadcast.
  bme280_data_t environmental;
  environmental.temperature = raw_t;
  environmental.humidity = raw_h;
  environmental.pressure = raw_p;

  switch(tag_mode)
  {
    case RAWv2_FAST:
    case RAWv2_SLOW:
      encodeToRawFormat5(data_buffer, &environmental, &buffer.sensor, acceleration_events, vbat, BLE_TX_POWER);
      break;
    
    case RAWv1:
    default:
      encodeToSensorDataFormat(data_buffer, &data);
      break;
  }

  updateAdvertisement();
  watchdog_feed();
}
Ejemplo n.º 20
0
void inline home_state() {
	if (init) {
		schedule_insert(system_schedule, 0, ms_clock, get_time);
		schedule_insert(system_schedule, 0, ms_clock, display_home_screen);
		schedule_insert(system_schedule, 0, ms_clock, display_temp_and_alarm_settings);
		schedule_insert(system_schedule, 0, ms_clock, start_ADC_conversion);
		
		nokia5110_clear();
		if (radio_is_on) {
			si4705_power_off();
			radio_is_on = false;
		}
		what_the_beep = false;
		set_volume(0);
		
		#ifndef USING_PRINTF
		PORTD |= _BV(0); // Turn the radio LED off
		PORTD |= _BV(1); // Turn the stereo status LED off
		#endif
	}
	if(bns[0]) {
		bns[0] = false;
	}
	if(bns[1]) {
		bns[1] = false;
		state = menu;
	}
	if(bns[2]) {
		bns[2] = false;
	}
	if (event_is_ready) {
		switch(next_event.id) {
			case start_ADC_conversion:
				ADC_start_conversion();
				set_brightness(photo_avg/PHOTO_AVG_RESOLUTION);
				schedule_insert(system_schedule, 20, ms_clock, start_ADC_conversion);
				break;
		
			case get_time:
				ds1307_getdate_s(&time);
				err = ds1307_getdayofweek(time.year, time.month, time.day);
				schedule_insert(system_schedule, 1000, ms_clock, get_time);
				//printf("%d:%d:%d\n", time.hour, time.minute, time.second);
				break;
		
			case display_home_screen:
				snprintf(line, 12, "%02d:%02d", time.hour - 12*(time.hour>12), time.minute);
				nokia5110_gotoXY(12,1);
				nokia5110_writeString_megaFont(line);
		
				snprintf(line, 12, " %s  ", days_of_week[err]);
				nokia5110_gotoXY(day_pixel_offsets[err],0);
				nokia5110_writeString(line);
		
				snprintf(line, 12, "%s", time.hour<12?"am":"pm");
				nokia5110_gotoXY(68,3);
				nokia5110_writeString(line);
		
				snprintf(line, 9, "%d/%d/%d   ", time.month, time.day, time.year);
				nokia5110_gotoXY(0,4);
				nokia5110_writeString(line);
		
				schedule_insert(system_schedule, 1000, ms_clock, display_home_screen);
				break;
		
			case display_temp_and_alarm_settings:
				init = false;
				snprintf(line, 8, "%02d.%01d%cF  ", (uint8_t)(temperature_avg/THERM_AVG_RESOLUTION/10), (uint8_t)(temperature_avg/THERM_AVG_RESOLUTION%10), 123);
				nokia5110_gotoXY(0,5);
				nokia5110_writeString(line);
			
				nokia5110_gotoXY(63,4);
				if (hol[3]) {
					snprintf(line, 4, "A:%c", alarm_A_is_beep?124+(ADC_values[0]>80)+(ADC_values[0]>180):127);
				} else {
					snprintf(line, 4, "A: ");
				}
				nokia5110_writeString(line);
				nokia5110_gotoXY(63,5);
				if (hol[4]) {
					snprintf(line, 4, "B:%c", alarm_B_is_beep?124+(ADC_values[0]>80)+(ADC_values[0]>180):127);
				} else {
					snprintf(line, 4, "B: ");
				}
				nokia5110_writeString(line);
				schedule_insert(system_schedule, 100, ms_clock, display_temp_and_alarm_settings);
				break;
			
			default:
				break;
		}
	}
	watchdog_feed();
}
Ejemplo n.º 21
0
void inline menu_state() {
	if (init) {
		schedule_insert(system_schedule, 0, ms_clock, start_ADC_conversion);
		
		menu_index = 0;
		nokia5110_clear();
		nokia5110_gotoXY(0,0);
		if (last_state == home) {
			nokia5110_writeString(">Radio");
		} else {
			nokia5110_writeString(">Radio Off");
		}
		nokia5110_gotoXY(0,1);
		nokia5110_writeString(" Time-Set");
		nokia5110_gotoXY(0,2);
		nokia5110_writeString(" Set AlarmA");
		nokia5110_gotoXY(0,3);
		nokia5110_writeString(" Set AlarmB");
		nokia5110_gotoXY(0,4);
		if (last_state == home) {
			nokia5110_writeString(" Set Presets");
		} else {
			nokia5110_writeString(" FM Presets");
		}
		
		nokia5110_gotoXY(0,5);
		nokia5110_writeString(" Back");
	}
	if (bns[0]) {
		bns[0] = false;
		nokia5110_gotoXY(0, menu_index);
		nokia5110_writeString(" ");
		menu_index = (menu_index+1) % 6;
		nokia5110_gotoXY(0, menu_index);
		nokia5110_writeString(">");
		wd_clock = 0; //reset activity
		watchdog_feed();
	}
	if(bns[1]) {
		bns[1] = false;
		switch(menu_index) {
			case 0:
				if (last_state == home) {
					state = radio; 
				} else {
					state = home; 
				} 
				break;
			case 1:
				state = set_clock; break;
			case 2:
				state = set_alarm_A; break;
			case 3:
				state = set_alarm_B; break;
			case 4:
				state = preset; break;
			default: 
				state = last_state; break;
		}	
	}
	if (bns[2]) {
		bns[2] = false;
		nokia5110_gotoXY(0, menu_index);
		nokia5110_writeString(" ");
		menu_index = (menu_index+5) % 6;
		nokia5110_gotoXY(0, menu_index);
		nokia5110_writeString(">");
		wd_clock = 0; //reset activity
		watchdog_feed();
	}
	if (event_is_ready) {
		switch(next_event.id) {
			case start_ADC_conversion:
				ADC_start_conversion();
				set_brightness(photo_avg/PHOTO_AVG_RESOLUTION);
				schedule_insert(system_schedule, 20, ms_clock, start_ADC_conversion);
				break;
			
			default:
				break;
		}
	}
	if(wd_clock == 60) {
		wd_clock = 0;
		state = last_state;
	}
}
Ejemplo n.º 22
0
void inline preset_state() {
	if (init) {
		schedule_insert(system_schedule, 0, ms_clock, start_ADC_conversion);
		
		menu_index = 0;
		nokia5110_clear();
		
		for (err = 0; err < NUMBER_OF_PRESETS; err++) {
			nokia5110_gotoXY(0, err);
			snprintf(line, 12, " %u.%u", presets[err]/10, presets[err]%10);
			nokia5110_writeString(line);
		}
		nokia5110_gotoXY(0,0);
		nokia5110_writeString(">");
		nokia5110_gotoXY(0,5);
		nokia5110_writeString(" Back");
	}
	if (bns[0]) {
		bns[0] = false;
		nokia5110_gotoXY(0, menu_index);
		nokia5110_writeString(" ");
		menu_index = (menu_index+1) % 6;
		nokia5110_gotoXY(0, menu_index);
		nokia5110_writeString(">");
		wd_clock = 0; // reset activity
		watchdog_feed();
	}
	if (bns[1]) {
		bns[1] = false;
		if(menu_index == 5) {
			state = last_state;
		} else {
			// choose preset
			if (last_state == home) {
				nokia5110_gotoXY(0,menu_index);
				nokia5110_writeString(" ");
				err = set_preset_variable(menu_index);
				if (err) {
					state = last_state;
				}
				nokia5110_gotoXY(0,menu_index);
				snprintf(line, 12, ">%u.%u", presets[menu_index]/10, presets[menu_index]%10);
				nokia5110_writeString(line);
			} else {	
				if (channel != presets[menu_index]) {
					channel = presets[menu_index];
					si4705_set_channel(channel);
					clear_radio_strings();
				}
				state = radio;
			}
		}
	}
	if (bns[2]) {
		bns[2] = false;
		nokia5110_gotoXY(0, menu_index);
		nokia5110_writeString(" ");
		menu_index = (menu_index+5) % 6;
		nokia5110_gotoXY(0, menu_index);
		nokia5110_writeString(">");
		wd_clock = 0; //reset activity
		watchdog_feed();
	}
	if (event_is_ready) {
		switch(next_event.id) {
			case start_ADC_conversion:
				ADC_start_conversion();
				set_brightness(photo_avg/PHOTO_AVG_RESOLUTION);
				schedule_insert(system_schedule, 20, ms_clock, start_ADC_conversion);
				break;
			
			default:
				break;
		}
	}
	if(wd_clock == 60) {
		wd_clock = 0;
		state = last_state;
	}
}