예제 #1
0
파일: gpio.c 프로젝트: adamliyi/skeleton
int gpio_clock_cycle(GPIO* gpio, int num_clks) {
	g_assert (gpio != NULL);
        int i=0;
	int r=GPIO_OK;
        for (i=0;i<num_clks;i++) {
                if (gpio_writec(gpio,'0') == -1) {
			r = GPIO_WRITE_ERROR;
			break;
		}
		if (gpio_writec(gpio,'1') == -1) {
			r = GPIO_WRITE_ERROR;
			break;
		}
        }
	return r;
}
예제 #2
0
int
fsi_bitbang(const char* pattern)
{
	int rc=GPIO_OK;
	int i;
	for(i=0;i<strlen(pattern);i++) {
		rc = gpio_writec(&fsi_data,pattern[i]);
		if(rc!=GPIO_OK) { break; }
		rc = gpio_clock_cycle(&fsi_clk,1);
		if(rc!=GPIO_OK) { break; }
	}
	return rc;
}
예제 #3
0
static gboolean
on_boot         (ControlHost        *host,
                GDBusMethodInvocation  *invocation,
                gpointer                user_data)
{
	// TODO: Add error checking
	g_print("Do Boot\n");
	int rc = GPIO_OK;

	Control* control = object_get_control((Object*)user_data);
	control_host_complete_boot(host,invocation);
	do {	
		rc |= gpio_open(&fsi_clk);
		rc |= gpio_open(&fsi_data);
		rc |= gpio_open(&fsi_enable);
		rc |= gpio_open(&cronus_sel);
		if (rc!=GPIO_OK) { break; }
		
		rc = gpio_write(&cronus_sel,1);
		//putcfam pu 281c 30000000 -p0
		char a[] = "000011111111110101111000111001100111111111111111111111111111101111111111";
		//putcfam pu 281c B0000000 -p0
		char b[] = "000011111111110101111000111000100111111111111111111111111111101101111111";

		gpio_write(&fsi_enable,1);
		gpio_write(&fsi_clk,1);
		gpio_write(&fsi_data,1);
		gpio_clock_cycle(&fsi_clk,5000);
		gpio_write(&fsi_data,0);
		gpio_clock_cycle(&fsi_clk,256);
		gpio_write(&fsi_data,1);
		gpio_clock_cycle(&fsi_clk,50);
		uint16_t i=0;
		for(i=0;i<strlen(a);i++) {
			gpio_writec(&fsi_data,a[i]);
			gpio_clock_cycle(&fsi_clk,1);
		}
		gpio_write(&fsi_data,1); /* Data standby state */
		gpio_clock_cycle(&fsi_clk,5000);

		for(i=0;i<strlen(b);i++) {
			gpio_writec(&fsi_data,b[i]);
			gpio_clock_cycle(&fsi_clk,1);
		}
		gpio_write(&fsi_data,1); /* Data standby state */
		gpio_clock_cycle(&fsi_clk,2);

	        gpio_write(&fsi_clk,0); /* hold clk low for clock mux */
	        gpio_write(&fsi_enable,0);
	        gpio_clock_cycle(&fsi_clk,16);
	        gpio_write(&fsi_clk,0); /* Data standby state */
	
	} while(0);
	if (rc != GPIO_OK)
	{
		printf("ERROR HostControl: GPIO sequence failed (rc=%d)\n",rc);
	}	
	gpio_close(&fsi_clk);
	gpio_close(&fsi_data);
	gpio_close(&fsi_enable);
	gpio_close(&cronus_sel);

	control_emit_goto_system_state(control,"HOST_BOOTING");
	
	control_host_emit_booted(host);
	return TRUE;
}