예제 #1
0
int USBSerial::_getc()
{
    if (!attached)
        return 0;
    uint8_t c = 0;
    setled(4, 1); while (rxbuf.isEmpty()); setled(4, 0);
    rxbuf.dequeue(&c);
    if (rxbuf.free() == MAX_PACKET_SIZE_EPBULK)
    {
        usb->endpointSetInterrupt(CDC_BulkOut.bEndpointAddress, true);
        iprintf("rxbuf has room for another packet, interrupt enabled\n");
    }
    else if ((rxbuf.free() < MAX_PACKET_SIZE_EPBULK) && (nl_in_rx == 0))
    {
        // handle potential deadlock where a short line, and the beginning of a very long line are bundled in one usb packet
        rxbuf.flush();
        flush_to_nl = true;

        usb->endpointSetInterrupt(CDC_BulkOut.bEndpointAddress, true);
        iprintf("rxbuf has room for another packet, interrupt enabled\n");
    }
    if (nl_in_rx > 0)
        if (c == '\n' || c == '\r')
            nl_in_rx--;

    return c;
}
예제 #2
0
void read_frame_buffer(long frame) {
	for(int i = 0; i < COLUMNS; i++) {
		for(int x = 0; x < ROWS; x++) {
			char* pix = getpixel(i, x);
			if(frame % FLASH == 0) {
				char p[3] = { bckflashred, bckflashgreen, bckflashblue };
				setled(i, x, p);
			} else {
				setled(i, x, pix);
			}
		}
	}
}
예제 #3
0
파일: led.c 프로젝트: upojzsb/wiringPiC
int main(void)
{
	//initialize Raspberry Pi and pins
	wiringPiSetup();

	pinMode(0,OUTPUT);
	pinMode(1,OUTPUT);
	pinMode(2,OUTPUT);
	pinMode(3,OUTPUT);
	pinMode(4,OUTPUT);
	pinMode(5,OUTPUT);
	pinMode(21,OUTPUT);
	pinMode(22,OUTPUT);
	pinMode(23,OUTPUT);
	pinMode(24,OUTPUT);
	pinMode(25,OUTPUT);
	pinMode(26,OUTPUT);

	//get time

	time_t the_time;
	struct tm * tm_ptr;
	
	while(1)
	{
	
	the_time = time((time_t *)0);
	
	tm_ptr = localtime(&the_time);

	//recode time h_1h_2:m_1m:2 hh:mm 
	int h_1, h_2, m_1, m_2;

	h_1 = tm_ptr->tm_hour / 10;
	h_2 = tm_ptr->tm_hour - (tm_ptr->tm_hour / 10) * 10;

	m_1 = tm_ptr->tm_min /10;
	m_2 = tm_ptr->tm_min - (tm_ptr->tm_min / 10) * 10;

	//if them show at the same time, the power is not enough
	setled(1,n[h_1]);
	delay(DELAY_TIME);
	setled(2,n[h_2]);
	delay(DELAY_TIME);
	setled(3,n[m_1]);
	delay(DELAY_TIME);
	setled(4,n[m_2]);
	delay(DELAY_TIME);

	}
}
예제 #4
0
파일: sbutton.c 프로젝트: gleicon/proglinux
void inv_state () {

	int lstate = 0;
	if ((ioctl(fd, TIOCMGET, &lstate)) == -1) {
		perror("IOCTL");
		exit(0);
	}
	setled(init_state, OFF, &lstate);		// Desliga o atual 

	init_state = !init_state;
	lstate = 0;
	setled(init_state, ON, &lstate);		// Led no estado invertido 
	if (DEBUG) fprintf(stderr, "Status invertido %d\n", init_state);
}
예제 #5
0
void CVFD::setled(void)
{
	if(fd < 0) return;

	int led1 = -1, led2 = -1;
	int select = 0;

	if(mode == MODE_MENU_UTF8 || mode == MODE_TVRADIO  )
		  select = g_settings.led_tv_mode;
	else if(mode == MODE_STANDBY)
		  select = g_settings.led_standby_mode;

	switch(select){
		case 0:
			led1 = FP_LED_1_OFF; led2 = FP_LED_2_OFF;
			break;
		case 1:
			led1 = FP_LED_1_ON; led2 = FP_LED_2_ON;
			break;
		case 2:
			led1 = FP_LED_1_ON; led2 = FP_LED_2_OFF;
			break;
		case 3:
			led1 = FP_LED_1_OFF; led2 = FP_LED_2_ON;
			break;
		default:
			break;
	}
	setled(led1, led2);
}
예제 #6
0
/*
 * function draw_clock()
 *
 * function for drawing the clock-face
 */
void Background_Menu::draw(void) {
    
    redbox->draw();
    greenbox->draw();
    bluebox->draw();
    done->draw();

    u8g->setFont(u8g_font_cu12_67_75);
        switch(active_item) {
            case 0:
                u8g->setPrintPos(5,redbox->get_y()+3);            
                break;
            case 1:
                u8g->setPrintPos(5,greenbox->get_y()+3);            
                break;
            case 2:
                u8g->setPrintPos(5,bluebox->get_y()+3);            
                break;
            case 3:
                u8g->setPrintPos(5,done->get_y()+3);            
                break;            
        }
    u8g->print( (char) 104 );
    
    red = redbox->get_value() ;
    green = greenbox->get_value();
    blue = bluebox->get_value();   
    setled();
}
예제 #7
0
int main ( int argc, char **argv ) {
    // pid_t pid;
    int res, status_led, blinks;

    // Must be called with 3 arguments
    if ( argc != 3 ) usage();

    if ( access( argv[2], F_OK|X_OK ) != 0 ) {
        fprintf( stderr, "Command does not exist or is not executable!" );
        exit( EXIT_FAILURE );
    }

    // Open the serial port
    if ( ( fd = open( argv[1], O_RDWR | O_NDELAY ) ) < 0 ) {
        fprintf( stderr, "Failed to open serial port" );
        perror( "open" );
        exit( EXIT_FAILURE );
    }

    // Register signal handlers to turn off the LEDs before exiting
    signal( SIGINT, cleanup );
    signal( SIGTERM, cleanup );

    // turn off the red led and turn on the green one
    // to indicate that we're working
    setled( GREEN_LED, 0 );
    setled( RED_LED, 1 );

    /*
    // fork into the background
    if ( ( pid = fork() ) < 0 ) {
        perror( "fork failed" );
        exit( 1 );
    } else if ( pid > 0 ) {
        exit( 0 );
    }
    */

    // daemonize
    while( 1 ) {
        if ( button_pressed() ) {
            setled( GREEN_LED, 0 );
            setled( RED_LED, 1 );
            res = system( argv[2] );
            status_led = ( res == 0 ) ? GREEN_LED : RED_LED;
            blinks = 30;
            setled( GREEN_LED, 0 );
            setled( RED_LED, 0 );
            while ( blinks > 0 ) {
                setled( status_led, -1 );
                sleep( 1 );
            }
        }
        sleep( 1 );
    }
    return ( 1 );
}
예제 #8
0
void read_textwall_buffer(long *offset, long frame) {
	 for(int i = 0; i < COLUMNS; i++) {
			for(int x = 0; x < ROWS; x++) {
				char pix = gettextpixel(i, x, *offset);
				if(pix != 0) {
					char p[3] = { txtred, txtgreen, txtblue };
					setled(i, x, p);
				} else {
					if(frame % FLASH == 0) {
						char p[3] = { bckflashred, bckflashgreen, bckflashblue };
						setled(i, x, p);
					} else {
						char p[3] = { bckred, bckgreen, bckblue };
						setled(i, x, p);
					}

				}
			}
	}
}
예제 #9
0
/*
cmd:led控制命令 0关1开
arg:led选择	led0~3
*/
static int led_ioctl(struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg)
{
	switch(cmd)
	{
		case 0:
		case 1:
			setled(cmd,arg);//进入设置led状态函数
			break;
			return 0;
		default: 
			return -EINVAL;
	}
	return 0;
}
예제 #10
0
파일: sbutton.c 프로젝트: gleicon/proglinux
int b_opendev(char *device) {
	int lstate = 0;

	fd = open(device, O_RDWR | O_NDELAY);
	if (fd < 0) {
		fprintf(stderr, "ERRO ao abrir \"%s\"\n", device);
		exit(2);
	}
	signal(SIGINT, offandexit);
		signal(SIGTERM, offandexit);
	signal(SIGUSR2, inv_state);

	setled(init_state, ON, &lstate);		// Led no estado inicial

	return (fd);
}
예제 #11
0
void CVFD::setled(bool on_off)
{
	if(g_settings.led_rec_mode == 0)
		return;

	int led1 = -1, led2 = -1;
	if(on_off){//on
		switch(g_settings.led_rec_mode) {
			case 1:
				led1 = FP_LED_1_ON; led2 = FP_LED_2_ON;
				break;
			case 2:
				led1 = FP_LED_1_ON;
				break;
			case 3:
				led2 = FP_LED_2_ON;
				break;
			default:
				break;
	      }
	}
	else {//off
		switch(g_settings.led_rec_mode) {
			case 1:
				led1 = FP_LED_1_OFF; led2 = FP_LED_2_OFF;
				break;
			case 2:
				led1 = FP_LED_1_OFF;
				break;
			case 3:
				led2 = FP_LED_2_OFF;
				break;
			default:
				led1 = FP_LED_1_OFF; led2 = FP_LED_2_OFF;
				break;
	      }
	}

	setled(led1, led2);
}
예제 #12
0
Background_Menu::Background_Menu(Widget *parent) 
    : Widget(parent)
{
    pinMode(BACKLIGHT_RED,   OUTPUT);   // sets the pins as output
    pinMode(BACKLIGHT_GREEN, OUTPUT);
    pinMode(BACKLIGHT_BLUE,  OUTPUT);
    
    period = 1000;
    phase_green = 300;
    phase_blue = 600;
        
    x = 0;
    y = 5;
        
    red = 0;
    green = 0;
    blue = 0;
    
    active_item = 0;
    int i = 0;    
    redbox = new InputBox(this, "Red", 0, 100, red);
    redbox->set_pos(x+20,y+10+i*(redbox->get_height()+4)-2);
    i++;
    greenbox = new InputBox(this, "Green", 0, 100, green);
    greenbox->set_pos(x+20,y+10+i*(greenbox->get_height()+4)-2);
    i++;
    bluebox = new InputBox(this, "Blue", 0, 100, blue);
    bluebox->set_pos(x+20,y+10+i*(bluebox->get_height()+4)-2);
    i++;
    done = new MenuItem("Done", this);     
    done->set_pos(x+20,y+10+i*(done->get_height()+4)-2);
    
    analogWrite(BACKLIGHT_RED,   red);   // Write current values to LED pins
    analogWrite(BACKLIGHT_GREEN, green);
    analogWrite(BACKLIGHT_BLUE,  blue);   
    setled();
}
예제 #13
0
static void
rxon(Ether *edev, Wnode *bss)
{
	uchar c[Tcmdsize], *p;
	int filter, flags, rate;
	Ctlr *ctlr;
	char *err;
	int idx;

	ctlr = edev->ctlr;
	filter = FilterNoDecrypt | FilterMulticast;
	if(ctlr->prom){
		filter |= FilterPromisc;
		if(bss != nil)
			ctlr->channel = bss->channel;
		bss = nil;
	}
	if(bss != nil){
		ctlr->channel = bss->channel;
		memmove(ctlr->bssid, bss->bssid, Eaddrlen);
		ctlr->aid = bss->aid;
		if(ctlr->aid != 0){
			filter |= FilterBSS;
			ctlr->bssnodeid = -1;
		}else
			ctlr->bcastnodeid = -1;
	}else{
		memmove(ctlr->bssid, edev->bcast, Eaddrlen);
		ctlr->aid = 0;
		ctlr->bcastnodeid = -1;
		ctlr->bssnodeid = -1;
	}
	flags = RFlagTSF | RFlag24Ghz | RFlagAuto;

	if(ctlr->aid != 0)
		setled(ctlr, 2, 0, 1);		/* on when associated */
	else if(memcmp(ctlr->bssid, edev->bcast, Eaddrlen) != 0)
		setled(ctlr, 2, 10, 10);	/* slow blink when connecting */
	else
		setled(ctlr, 2, 5, 5);		/* fast blink when scanning */

	memset(p = c, 0, sizeof(c));
	memmove(p, edev->ea, 6); p += 8;	/* myaddr */
	memmove(p, ctlr->bssid, 6); p += 16;	/* bssid */
	*p++ = 3;				/* mode (STA) */
	p += 3;
	*p++ = 0xff;				/* ofdm mask (not yet negotiated) */
	*p++ = 0x0f;				/* cck mask (not yet negotiated) */
	put16(p, ctlr->aid & 0x3fff);		/* associd */
	p += 2;
	put32(p, flags);
	p += 4;
	put32(p, filter);
	p += 4;
	*p++ = ctlr->channel;
	p += 3;

	if((err = cmd(ctlr, 16, c, p - c)) != nil){
		print("rxon: %s\n", err);
		return;
	}

	/* tx power */
	memset(p = c, 0, sizeof(c));
	*p++ = 1;	/* band (0 = 5ghz) */
	p++;		/* reserved */
	put16(p, ctlr->channel), p += 2;
	for(rate = 0; rate < nelem(ratetab); rate++){
		idx = pwridx(ctlr, &ctlr->eeprom.pwrgrps[0], ctlr->channel, rate);
		*p++ = ratetab[rate].plcp;
		*p++ = rfgain_2ghz[idx];	/* rf_gain */
		*p++ = dspgain_2ghz[idx];	/* dsp_gain */
		p++;		/* reservd */
	}
	cmd(ctlr, 151, c, p - c);

	if(ctlr->bcastnodeid == -1){
		ctlr->bcastnodeid = 24;
		addnode(ctlr, ctlr->bcastnodeid, edev->bcast, ratetab[0].plcp, 3<<6);
	}
	if(ctlr->bssnodeid == -1 && bss != nil && ctlr->aid != 0){
		ctlr->bssnodeid = 0;
		addnode(ctlr, ctlr->bssnodeid, bss->bssid, ratetab[0].plcp, 3<<6);
	}
}
예제 #14
0
void CVFD::showTime(bool force)
{
	//unsigned int system_rev = cs_get_revision();
	static int recstatus = 0;
#if 0
	if(!has_lcd)
		return;
#endif
	if(fd >= 0 && mode == MODE_SHUTDOWN) {
		ShowIcon(FP_ICON_CAM1, false);
		return;
	}
	if (fd >= 0 && showclock) {
		if (mode == MODE_STANDBY || ( g_settings.lcd_info_line && (MODE_TVRADIO == mode))) {
			char timestr[21];
			struct timeb tm;
			struct tm * t;
			static int hour = 0, minute = 0;

			ftime(&tm);
			t = localtime(&tm.time);
			if(force || ( switch_name_time_cnt == 0 && ((hour != t->tm_hour) || (minute != t->tm_min))) ) {
				hour = t->tm_hour;
				minute = t->tm_min;
#if !defined (BOXMODEL_HS7810A) && !defined (BOXMODEL_HS7819)
#if defined (BOXMODEL_OCTAGON1008)
				ShowIcon(ICON_COLON2, true);
#elif defined (BOXMODEL_OCTAGON1008) || defined (BOXMODEL_HS7119) || defined (BOXMODEL_CUBEREVO_250HD)
				strftime(timestr, 5, "%H%M", t);
#else
				strftime(timestr, 6, "%H:%M", t);
#endif
				ShowText(timestr);
#else //HS7810A or HS7819, string should not scroll
				strftime(timestr, 6, "%H:%M", t);
				struct vfd_ioctl_data data;
				memset(data.data, ' ', 6);
				memcpy (data.data, timestr, 6);
				data.start = 0;
				data.length = 5;
				write_to_vfd(VFDDISPLAYCHARS, &data);
#endif
				if (support_text) {
					strftime(timestr, 20, "%H:%M", t);
					ShowText(timestr);
				} else if (support_numbers && has_led_segment) {
					ShowNumber((t->tm_hour*100) + t->tm_min);
#ifdef BOXMODEL_APOLLO
					ioctl(fd, IOC_FP_SET_COLON, 0x01);
#endif
				}
			}
		}
	}

	int tmp_recstatus = CNeutrinoApp::getInstance()->recordingstatus;
	if (tmp_recstatus) {
		if(clearClock) {
			clearClock = 0;
			if(has_lcd)
				ShowIcon(FP_ICON_CAM1, false);
#if !HAVE_DUCKBOX_HARDWARE
			setled(false);//off
#endif
		} else {
			clearClock = 1;
			if(has_lcd)
				ShowIcon(FP_ICON_CAM1, true);
#if !HAVE_DUCKBOX_HARDWARE
			setled(true);//on
#endif
		}
	} else if(clearClock || (recstatus != tmp_recstatus)) { // in case icon ON after record stopped
		clearClock = 0;
		if(has_lcd)
			ShowIcon(FP_ICON_CAM1, false);

#if !HAVE_DUCKBOX_HARDWARE
		setled();
#endif
	}

	recstatus = tmp_recstatus;
}
예제 #15
0
void CVFD::setMode(const MODES m, const char * const title)
{
	if(fd < 0) return;

	// Clear colon in display if it is still there
#ifdef BOXMODEL_APOLLO
	if (support_numbers && has_led_segment)
		ioctl(fd, IOC_FP_SET_COLON, 0x00);
#endif

	if(mode == MODE_AUDIO)
		ShowIcon(FP_ICON_MP3, false);
#if 0
	else if(mode == MODE_STANDBY) {
		ShowIcon(FP_ICON_COL1, false);
		ShowIcon(FP_ICON_COL2, false);
	}
#endif

	if(strlen(title))
		ShowText(title);
	mode = m;
	setlcdparameter();

	switch (m) {
	case MODE_TVRADIO:
		switch (g_settings.lcd_setting[SNeutrinoSettings::LCD_SHOW_VOLUME])
		{
		case 0:
			showPercentOver(percentOver, false);
			break;
		case 1:
			showVolume(volume, false);
			break;
#if 0
		case 2:
			showVolume(volume, false);
			showPercentOver(percentOver, false);
			break;
#endif
		}
		showServicename(servicename);
		showclock = true;
		if(g_settings.lcd_info_line)
			switch_name_time_cnt = g_settings.timing[SNeutrinoSettings::TIMING_INFOBAR] + 10;
		break;
	case MODE_AUDIO:
	{
		ShowIcon(FP_ICON_MP3, true);
		showAudioPlayMode(AUDIO_MODE_STOP);
		showVolume(volume, false);
		showclock = true;
		//showTime();      /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */
		break;
	}
	case MODE_SCART:
		showVolume(volume, false);
		showclock = true;
		//showTime();      /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */
		break;
	case MODE_MENU_UTF8:
		showclock = false;
		//fonts.menutitle->RenderString(0,28, 140, title, CLCDDisplay::PIXEL_ON);
		break;
	case MODE_SHUTDOWN:
		showclock = false;
		Clear();
		break;
	case MODE_STANDBY:
#if 0
		ShowIcon(FP_ICON_COL1, true);
		ShowIcon(FP_ICON_COL2, true);
#endif
		ClearIcons();
		ShowIcon(FP_ICON_USB, false);
		ShowIcon(FP_ICON_HDD, false);
		showclock = true;
		showTime(true);      /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */
		                 /* "showTime()" clears the whole lcd in MODE_STANDBY                         */
		break;
#ifdef VFD_UPDATE
        case MODE_FILEBROWSER:
                showclock = true;
                display.draw_fill_rect(-1, -1, 120, 64, CLCDDisplay::PIXEL_OFF); // clear lcd
                showFilelist();
                break;
        case MODE_PROGRESSBAR:
                showclock = false;
                display.load_screen(&(background[BACKGROUND_SETUP]));
                showProgressBar();
                break;
        case MODE_PROGRESSBAR2:
                showclock = false;
                display.load_screen(&(background[BACKGROUND_SETUP]));
                showProgressBar2();
                break;
        case MODE_INFOBOX:
                showclock = false;
                showInfoBox();
                break;
#endif // VFD_UPDATE
	}
	wake_up();
#if !HAVE_DUCKBOX_HARDWARE
	setled();
#endif
}
예제 #16
0
파일: test.c 프로젝트: saaadhu/AVR
void act()
{
	volatile char t = 0;
	for (;t < 8; t++)
		setled(t);
}
예제 #17
0
파일: test.c 프로젝트: saaadhu/AVR
void test()
{
	setup();
	setled(255);

}
예제 #18
0
void CLCD::showTime(bool force)
{
	static bool blink = false;
	int red = -1, green = -1;

	if (mode == MODE_SHUTDOWN)
	{
		setled(1, 1);
		return;
	}

	time_t now = time(NULL);
	if (upd_display)
	{
		display(display_text);
		upd_display = false;
	}
	else if (power && (force || (showclock && (now - last_display) > 4)))
	{
		char timestr[64]; /* todo: change if we have a simple display with 63+ chars ;) */
		struct tm *t;
		static int hour = 0, minute = 0;

		t = localtime(&now);
		if (force || last_display || (hour != t->tm_hour) || (minute != t->tm_min)) {
			hour = t->tm_hour;
			minute = t->tm_min;
			int ret = -1;
#if HAVE_SPARK_HARDWARE
			now += t->tm_gmtoff;
			int fd = dev_open();
#if 0 /* VFDSETTIME is broken and too complicated anyway -> use VFDSETTIME2 */
			int mjd = 40587 + now  / 86400; /* 1970-01-01 is mjd 40587 */
			struct aotom_ioctl_data d;
			d.u.time.time[0] = mjd >> 8;
			d.u.time.time[1] = mjd & 0xff;
			d.u.time.time[2] = hour;
			d.u.time.time[3] = minute;
			d.u.time.time[4] = t->tm_sec;
			int ret = ioctl(fd, VFDSETTIME, &d);
#else
			ret = ioctl(fd, VFDSETTIME2, &now);
#endif
			close(fd);
#endif
			if (ret < 0 && servicename.empty())
			{
				if (g_info.hw_caps->display_xres < 5)
					sprintf(timestr, "%02d%02d", hour, minute);
				else	/* pad with spaces on the left side to center the time string */
					sprintf(timestr, "%*s%02d:%02d",(g_info.hw_caps->display_xres - 5)/2, "", hour, minute);
				display(timestr, false);
			}
			else
			{
				if (vol_active)
					showServicename(servicename);
				vol_active = false;
			}
			last_display = 0;
		}