void destroy_mutex(kiss_mutex m)
{
	if(!kiss_init())
		return;

	return glfwDestroyMutex(m);
}
void defer()
{
	if(!kiss_init())
		return;
	
	glfwSleep(0);
}
kiss_mutex create_mutex()
{
	if(!kiss_init())
		return 0;

	return glfwCreateMutex();
}
int start_process(void (*func)())
{
	if(!kiss_init())
		return 0;

	return glfwCreateThread(kiss_run_process, (void *)func);
}
void kill_process(int pid)
{
	if(!kiss_init())
		return;

	glfwDestroyThread(pid);
}
void unlock_mutex(kiss_mutex m)
{
	if(!kiss_init())
		return;

	glfwUnlockMutex(m);
}
Exemple #7
0
static void init(void)
{
	/* Enable all the interrupts */
	IRQ_ENABLE;

	/* Initialize debugging module (allow kprintf(), etc.) */
	kdbg_init();
	/* Initialize system timer */
	timer_init();
	/* Initialize LED driver */
	LED_INIT();

	ser_init(&ser_port, SER_UART2);
	ser_setbaudrate(&ser_port, 115200L);

	afsk_init(&afsk, 0, 0);

	// timer period = 24000000 hz /100/25 = 9600hz
	AD_Init(&afsk);
	AD_SetTimer(100, 25);
	AD_Start();

	DA_Init(&afsk);
	DA_SetTimer(100, 25);

	kiss_init(&ser_port, &ax25, &afsk);

	ax25_init(&ax25, &afsk.fd, 1, ax25_message_callback);
}
void graphics_quit()
{
	if(!kiss_init())
		return;

	kiss_lock();
	kiss_exec_op(KISS_CLOSE_WINDOW, 0, 0);
	kiss_unlock();
}
int graphics_init(int width, int height)
{
	if(!kiss_init())
		return 0;

	kiss_lock();
	kiss_exec_op(KISS_OPEN_WINDOW, width, height);
	kiss_unlock();
	return 1;
}
void graphics_update()
{
	if(!kiss_init())
		return;

	kiss_lock();
	kiss_graphics_lock();
	kiss_exec_op(KISS_COPY, 0, 0);
	kiss_graphics_unlock();
	kiss_unlock();
}
void graphics_circle(int cx, int cy, int radius, int r, int g, int b)
{
	if(!kiss_init())
		return;

	kiss_lock();
	kiss_graphics_lock();
	if(kiss_g_graphics_enabled)
		kiss_graphics_circle(cx, cy, radius, r, g, b);
	kiss_graphics_unlock();
	kiss_unlock();
}
void graphics_line(int x1, int y1, int x2, int y2, int r, int g, int b)
{
	if(!kiss_init())
		return;

	kiss_lock();
	kiss_graphics_lock();
	if(kiss_g_graphics_enabled)
		kiss_graphics_line(x1, y1, x2, y2, r, g, b);
	kiss_graphics_unlock();
	kiss_unlock();
}
void graphics_pixel(int x, int y, int r, int g, int b)
{
	if(!kiss_init())
		return;

	kiss_lock();
	kiss_graphics_lock();
	if(kiss_g_graphics_enabled)
		kiss_graphics_pixel(x, y, r, g, b);
	kiss_graphics_unlock();
	kiss_unlock();
}
void graphics_triangle_fill(int x1, int y1, int x2, int y2, int x3, int y3, int r, int g, int b)
{
	if(!kiss_init())
		return;
		
	kiss_lock();
	kiss_graphics_lock();
	if(kiss_g_graphics_enabled)
		kiss_graphics_triangle_fill(x1, y1, x2, y2, x3, y3, r, g, b);
	kiss_graphics_unlock();
	kiss_unlock();
}
void graphics_fill(int r, int g, int b)
{
	if(!kiss_init())
		return;

	kiss_lock();
	kiss_graphics_lock();
	if(kiss_g_graphics_enabled)
		kiss_graphics_fill(r, g, b);
	kiss_graphics_unlock();
	kiss_unlock();

}
Exemple #16
0
void init(void) {
    sei();

    AFSK_init(&modem);
    ax25_init(&AX25, &modem.fd, ax25_callback);

    serial_init(&serial);    
    stdout = &serial.uart0;
    stdin  = &serial.uart0;

    #if SERIAL_PROTOCOL == PROTOCOL_KISS
        kiss_init(&AX25, &modem, &serial);
    #endif

    #if SERIAL_PROTOCOL == PROTOCOL_SIMPLE_SERIAL
        ss_init(&AX25);
    #endif
}
Exemple #17
0
/**
 * Initialize the module.  Initialize the following subsystems:
 *
 * - kernel debugging
 * - timer
 * - serial UART0
 * - Bluetooth module
 * - AFSK driver
 * - KISS driver
 *
 * The AFSK module should be initialized after the startup banner is
 * printed to reduce the chance of a buffer overrun.
 */
static void init(void)
{
    IRQ_ENABLE;
    kdbg_init();
    timer_init();

    power_on();

    int hc_status = init_hc05(&ser.fd);

    wdt_location = 0;

    mobilinkd_set_error(MOBILINKD_ERROR_WATCHDOG_TIMEOUT);

    afsk_init(&afsk, ADC_CH, 0);

    wdt_location = 1;

    kiss_init(&kiss, &afsk.fd, &ser.fd);
    wdt_location = 2;

    if (kiss.params.options & KISS_OPTION_VIN_POWER_ON)
    {
        set_power_config(get_power_config() | POWER_ON_VIN_ON);
    }
    if (kiss.params.options & KISS_OPTION_VIN_POWER_OFF)
    {
        set_power_config(get_power_config() | POWER_OFF_VIN_OFF);
    }

    if (kiss.params.options & KISS_OPTION_PTT_SIMPLEX)
    {
        afsk_ptt_set(&afsk, AFSK_PTT_MODE_SIMPLEX);
    }
    else
    {
        afsk_ptt_set(&afsk, AFSK_PTT_MODE_MULTIPLEX);
    }

    power_on_message(hc_status);
    enable_power_off();

    wdt_enable(WDTO_4S);
}
Exemple #18
0
int main(int argc, char **argv)
{
	SDL_Renderer *renderer;
	SDL_Event e;
	kiss_array objects, a1, a2;
	kiss_window window1, window2;
	kiss_label label1 = {0}, label2 = {0}, label_sel = {0},
		label_res = {0};
	kiss_button button_ok1 = {0}, button_ok2 = {0}, button_cancel = {0};
	kiss_textbox textbox1 = {0}, textbox2 = {0};
	kiss_vscrollbar vscrollbar1 = {0}, vscrollbar2 = {0};
	kiss_progressbar progressbar = {0};
	kiss_entry entry = {0};
	int textbox_width, textbox_height, window2_width, window2_height,
		draw, quit;

	quit = 0;
	draw = 1;
	textbox_width = 250;
	textbox_height = 250;
	window2_width = 400;
	window2_height = 168;
	renderer = kiss_init("kiss_sdl example 1", &objects, 640, 480);
	if (!renderer) return 1;
	kiss_array_new(&a1);
	kiss_array_append(&objects, ARRAY_TYPE, &a1);
	kiss_array_new(&a2);
	kiss_array_append(&objects, ARRAY_TYPE, &a2);

	/* Arrange the widgets nicely relative to each other */
	kiss_window_new(&window1, NULL, 1, 0, 0, kiss_screen_width,
		kiss_screen_height);
	kiss_textbox_new(&textbox1, &window1, 1, &a1, kiss_screen_width / 2 -
		(2 * textbox_width + 2 * kiss_up.w - kiss_edge) / 2,
		3 * kiss_normal.h, textbox_width, textbox_height);
	kiss_vscrollbar_new(&vscrollbar1, &window1, textbox1.rect.x +
		textbox_width, textbox1.rect.y, textbox_height);
	kiss_textbox_new(&textbox2, &window1, 1, &a2,
		vscrollbar1.uprect.x + kiss_up.w, textbox1.rect.y,
		textbox_width, textbox_height);
	kiss_vscrollbar_new(&vscrollbar2, &window1, textbox2.rect.x +
		textbox_width, vscrollbar1.uprect.y, textbox_height);
	kiss_label_new(&label1, &window1, "Folders", textbox1.rect.x +
		kiss_edge, textbox1.rect.y - kiss_textfont.lineheight);
	kiss_label_new(&label2, &window1, "Files", textbox2.rect.x +
		kiss_edge, textbox1.rect.y - kiss_textfont.lineheight);
	kiss_label_new(&label_sel, &window1, "", textbox1.rect.x +
		kiss_edge, textbox1.rect.y + textbox_height +
		kiss_normal.h);
	kiss_entry_new(&entry, &window1, 1, "kiss", textbox1.rect.x,
		label_sel.rect.y + kiss_textfont.lineheight,
		2 * textbox_width + 2 * kiss_up.w + kiss_edge);
	kiss_button_new(&button_cancel, &window1, "Cancel",
		entry.rect.x + entry.rect.w - kiss_edge - kiss_normal.w,
		entry.rect.y + entry.rect.h + kiss_normal.h);
	kiss_button_new(&button_ok1, &window1, "OK", button_cancel.rect.x -
		2 * kiss_normal.w, button_cancel.rect.y);
	kiss_window_new(&window2, NULL, 1, kiss_screen_width / 2 -
		window2_width / 2, kiss_screen_height / 2 -
		window2_height / 2, window2_width, window2_height);
	kiss_label_new(&label_res, &window2, "", window2.rect.x +
		kiss_up.w, window2.rect.y + kiss_vslider.h);
	label_res.textcolor = kiss_blue;
	kiss_progressbar_new(&progressbar, &window2, window2.rect.x +
		kiss_up.w - kiss_edge, window2.rect.y + window2.rect.h / 2 -
		kiss_bar.h / 2 - kiss_border,
		window2.rect.w - 2 * kiss_up.w + 2 * kiss_edge);
	kiss_button_new(&button_ok2, &window2, "OK", window2.rect.x +
		window2.rect.w / 2 - kiss_normal.w / 2,
		progressbar.rect.y + progressbar.rect.h +
		2 * kiss_vslider.h);

	dirent_read(&textbox1, &vscrollbar1, &textbox2, &vscrollbar2,
		&label_sel);
	/* Do that, and all widgets associated with the window will show */
	window1.visible = 1;

	while (!quit) {

		/* Some code may be written here */

		SDL_Delay(10);
		while (SDL_PollEvent(&e)) {
			if (e.type == SDL_QUIT) quit = 1;

			kiss_window_event(&window2, &e, &draw);
			kiss_window_event(&window1, &e, &draw);
			textbox1_event(&textbox1, &e, &vscrollbar1,
				&textbox2, &vscrollbar2, &label_sel, &draw);
			vscrollbar1_event(&vscrollbar1, &e, &textbox1,
				&draw);
			textbox2_event(&textbox2, &e, &vscrollbar2, &entry,
				&draw);
			vscrollbar2_event(&vscrollbar2, &e, &textbox2, &draw);
			button_ok1_event(&button_ok1, &e, &window1, &window2,
				&label_sel, &entry, &label_res,	&progressbar,
				&draw);
			button_cancel_event(&button_cancel, &e, &quit,
				&draw);
			kiss_entry_event(&entry, &e, &draw);
			button_ok2_event(&button_ok2, &e, &window1, &window2,
				&progressbar, &draw);
		}

		vscrollbar1_event(&vscrollbar1, NULL, &textbox1, &draw);
		vscrollbar2_event(&vscrollbar2, NULL, &textbox2, &draw);
		kiss_progressbar_event(&progressbar, NULL, &draw);

		if (!draw) continue;
		SDL_RenderClear(renderer);

		kiss_window_draw(&window1, renderer);
		kiss_label_draw(&label1, renderer);
		kiss_label_draw(&label2, renderer);
		kiss_textbox_draw(&textbox1, renderer);
		kiss_vscrollbar_draw(&vscrollbar1, renderer);
		kiss_textbox_draw(&textbox2, renderer);
		kiss_vscrollbar_draw(&vscrollbar2, renderer);
		kiss_label_draw(&label_sel, renderer);
		kiss_entry_draw(&entry, renderer);
		kiss_button_draw(&button_ok1, renderer);
		kiss_button_draw(&button_cancel, renderer);
		kiss_window_draw(&window2, renderer);
		kiss_label_draw(&label_res, renderer);
		kiss_progressbar_draw(&progressbar, renderer);
		kiss_button_draw(&button_ok2, renderer);

		SDL_RenderPresent(renderer);
		draw = 0;
	}
	kiss_clean(&objects);
	return 0;
}
Exemple #19
0
// ------------------------------------------------------------------------------------------------
int main (int argc, char **argv)
// ------------------------------------------------------------------------------------------------
{
    int i, nbytes;

    // unsolicited termination handling
    struct sigaction sa;
    // Catch all signals possible on process exit!
    for (i = 1; i < 64; i++) 
    {
        // skip SIGUSR2 for Wiring Pi
        if (i == 17)
            continue; 

        // These are uncatchable or harmless or we want a core dump (SEGV) 
        if (i != SIGKILL
            && i != SIGSEGV
            && i != SIGSTOP
            && i != SIGVTALRM
            && i != SIGWINCH
            && i != SIGPROF) 
        {
            memset(&sa, 0, sizeof(sa));
            sa.sa_handler = terminate;
            sigaction(i, &sa, NULL);
        }
    }

    // Set argument defaults
    init_args(&arguments); 

    // Parse arguments 
    argp_parse (&argp, argc, argv, 0, 0, &arguments);

    if (arguments.print_long_help)
    {
        print_long_help();
        return 0;
    }
    
    if (!arguments.usbacm_device)
    {
        arguments.usbacm_device = strdup("/dev/ttyACM2");
    }
    
    if (!arguments.serial_device)
    {
        arguments.serial_device = strdup("/var/ax25/axp2");
    }
    
    if (!arguments.bulk_filename)
    {
        arguments.bulk_filename = strdup("-");
    }

    set_serial_parameters(&serial_parms_ax25, arguments.serial_device, get_serial_speed(arguments.serial_speed, &arguments.serial_speed_n));
    set_serial_parameters(&serial_parms_usb,  arguments.usbacm_device, get_serial_speed(115200, &arguments.usb_speed_n));
    init_radio_parms(&radio_parms, &arguments);

    if (arguments.verbose_level > 0)
    {
        print_args(&arguments);
        print_radio_parms(&radio_parms);
        fprintf(stderr, "\n");
    }

    if (arguments.tnc_mode == TNC_KISS)
    {
        kiss_init(&arguments);
        kiss_run(&serial_parms_ax25, &serial_parms_usb, &radio_parms, &arguments);
    }
    else if (arguments.tnc_mode == TNC_SLIP)
    {
        arguments.slip = 1;
        kiss_init(&arguments);
        kiss_run(&serial_parms_ax25, &serial_parms_usb, &radio_parms, &arguments);
    }
    else if (arguments.tnc_mode == TNC_TEST_USB_ECHO) // This one does not need any access to the radio
    {
        usb_test_echo(&serial_parms_usb, &arguments);
    }
    else if (arguments.tnc_mode == TNC_RADIO_STATUS) 
    {
        print_radio_status(&serial_parms_usb, &arguments);
    }
    else if (arguments.tnc_mode == TNC_RADIO_INIT)
    {
        init_radio(&serial_parms_usb, &radio_parms, &arguments);

        if (nbytes < 0)
        {
            fprintf(stderr, "Error\n");
        }
    }
    else if (arguments.tnc_mode == TNC_TEST_TX)
    {
        radio_transmit_test(&serial_parms_usb, &radio_parms, &arguments);
    }
    else if (arguments.tnc_mode == TNC_TEST_RX)
    {
        radio_receive_test(&serial_parms_usb, &radio_parms, &arguments);
    }
    else if (arguments.tnc_mode == TNC_TEST_ECHO_TX)
    {
        radio_echo_test(&serial_parms_usb, &radio_parms, &arguments, 1);
    } 
    else if (arguments.tnc_mode == TNC_TEST_ECHO_RX)
    {
        radio_echo_test(&serial_parms_usb, &radio_parms, &arguments, 0);
    }
    else if (arguments.tnc_mode == TNC_TEST_TX_PACKET)
    {
        radio_packet_transmit_test(&serial_parms_usb, &radio_parms, &arguments);
    }
    else if (arguments.tnc_mode == TNC_TEST_RX_PACKET)
    {
        radio_packet_receive_test(&serial_parms_usb, &radio_parms, &arguments);
    }
    else if (arguments.tnc_mode == TNC_TEST_RX_PACKET_NON_BLOCKING)
    {
        radio_packet_receive_nb_test(&serial_parms_usb, &radio_parms, &arguments);
    }
    else if (arguments.tnc_mode == TNC_BULK_TX)
    {
        file_bulk_transmit(&serial_parms_usb, &radio_parms, &arguments);
    }
    else if (arguments.tnc_mode == TNC_BULK_RX)
    {
        file_bulk_receive(&serial_parms_usb, &radio_parms, &arguments);
    }

    close_serial(&serial_parms_usb);
    close_serial(&serial_parms_ax25);
    delete_args(&arguments);
    return 0;
}
Exemple #20
0
static void init(void)
{

    IRQ_ENABLE;

	kdbg_init();
	timer_init();

	/* Initialize serial port, we are going to use it to show APRS messages*/
	ser_init(&g_serial, SER_UART0);
	ser_setbaudrate(&g_serial, SER_DEFAULT_BAUD_RATE);
    // For some reason BertOS sets the serial
    // to 7 bit characters by default. We set
    // it to 8 instead.
    UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); // see ATMEGA328P datasheet P197, Table 20-11. UCSZn Bits Settings

    // initialize the reader that wraps the serial
    serialreader_init(&g_serialreader, &g_serial);

    // Load settings first
    settings_load();

	/*
	 * Init afsk demodulator. We need to implement the macros defined in hw_afsk.h, which
	 * is the hardware abstraction layer.
	 * We do not need transmission for now, so we set transmission DAC channel to 0.
	 */
	afsk_init(&g_afsk, ADC_CH, DAC_CH);

	/*
	 * Here we initialize AX25 context, the channel (KFile) we are going to read messages
	 * from and the callback that will be called on incoming messages.
	 */
	ax25_init(&g_ax25, &g_afsk.fd, ax25_msg_callback);
	g_ax25.pass_through = false;

	// Initialize the kiss module
	// NOTE - use shared memory buffer
#if MOD_KISS
	kiss_init(&g_serialreader,&g_ax25);
#endif

#if MOD_BEACON
	// Initialize the beacon module
    beacon_init(beacon_mode_exit_callback);
#endif

    // Initialize the digi module
#if MOD_DIGI
    digi_init();
#endif

#if MOD_RADIO
    // Initialize the soft serial and radio
    radio_init(4310400); //TODO read from settings
#endif

    // Initialize GPS NMEA/GPRMC parser
#if MOD_TRACKER
    tracker_init();
#endif

#if MOD_CONSOLE
    //////////////////////////////////////////////////////////////
    // Initialize the console & commands
    console_init();
    console_add_command(PSTR("MODE"),cmd_switch_mode);			// setup tnc run mode
#if MOD_KISS
    console_add_command(PSTR("KISS"),cmd_enter_kiss_mode);		// enable KISS mode
#endif
#endif
}
Exemple #21
0
int main(int argc, char **argv)
{
	SDL_Renderer *renderer;
	SDL_Event e;
	kiss_array objects, a;
	kiss_window window;
	kiss_label label1 = {0}, label2 = {0};
	kiss_button button_ok = {0};
	kiss_hscrollbar hscrollbar = {0};
	kiss_entry entry = {0};
	kiss_combobox combobox = {0};
	kiss_selectbutton select1 = {0}, select2 = {0};
	char stext[KISS_MAX_LENGTH];
	int combobox_width, combobox_height, entry_width;
	int first, draw, quit, i;

	quit = 0;
	draw = 1;
	first = 0;
	strcpy(stext, "");
	/* Combobox textbox width and height */
	combobox_width = 150;
	combobox_height = 66;
	entry_width = 250;
	renderer = kiss_init("kiss_sdl example 2", &objects, 640, 480);
	if (!renderer) return 1;
	kiss_array_new(&a);
	for (i = 0; cities[i].population; i++)
		kiss_array_appendstring(&a, 0, cities[i].name, NULL);
	kiss_array_append(&objects, ARRAY_TYPE, &a);

	/* Arrange the widgets nicely relative to each other */
	kiss_window_new(&window, NULL, 1, 0, 0, kiss_screen_width,
		kiss_screen_height);
	kiss_label_new(&label1, &window, "Population",
		kiss_screen_width / 2 - (combobox_width +
		kiss_up.w - kiss_edge) / 2 + kiss_edge,
		6 * kiss_textfont.lineheight);
	kiss_selectbutton_new(&select1, &window,
		label1.rect.x + combobox_width + kiss_up.w -
		kiss_edge - kiss_selected.w, label1.rect.y +
		kiss_textfont.ascent - kiss_selected.h);
	kiss_label_new(&label2, &window, "Area", label1.rect.x,
		label1.rect.y + 2 * kiss_textfont.lineheight);
	kiss_selectbutton_new(&select2, &window, select1.rect.x,
		label2.rect.y + kiss_textfont.ascent - kiss_selected.h);
	kiss_combobox_new(&combobox, &window, "none", &a, label1.rect.x -
		kiss_edge, label2.rect.y + 2 * kiss_textfont.lineheight,
		combobox_width, combobox_height);
	kiss_entry_new(&entry, &window, 1, "",
		kiss_screen_width / 2 - entry_width / 2 + kiss_edge,
		combobox.entry.rect.y + combobox.entry.rect.h +
		2 * kiss_textfont.lineheight + kiss_border, entry_width);
	kiss_hscrollbar_new(&hscrollbar, &window, entry.rect.x,
		entry.rect.y + entry.rect.h, entry.rect.w);
	kiss_button_new(&button_ok, &window, "OK",
		entry.rect.x + entry.rect.w - kiss_edge - kiss_normal.w,
		entry.rect.y + entry.rect.h + kiss_left.h +
		2 * kiss_normal.h);

	select1.selected = 1;
	hscrollbar.step = 0.;
	/* Do that, and all widgets associated with the window will show */
	window.visible = 1;

	while (!quit) {

		/* Some code may be written here */

		SDL_Delay(10);
		while (SDL_PollEvent(&e)) {
			if (e.type == SDL_QUIT) quit = 1;

			kiss_window_event(&window, &e, &draw);
			select1_event(&select1, &e, &select2, &draw);
			select2_event(&select2, &e, &select1, &draw);
			combobox_event(&combobox, &e, stext, &entry,
				&select1, &select2, &hscrollbar, &draw);
			hscrollbar_event(&hscrollbar, &e, stext, &first,
				&entry, &draw);
			button_ok_event(&button_ok, &e, &quit, &draw);
		}

		kiss_combobox_event(&combobox, NULL, &draw);
		hscrollbar_event(&hscrollbar, NULL, stext, &first, &entry,
			&draw);

		if (!draw) continue;
		SDL_RenderClear(renderer);

		kiss_window_draw(&window, renderer);
		kiss_button_draw(&button_ok, renderer);
		kiss_hscrollbar_draw(&hscrollbar, renderer);
		kiss_entry_draw(&entry, renderer);
		kiss_combobox_draw(&combobox, renderer);
		kiss_selectbutton_draw(&select2, renderer);
		kiss_label_draw(&label2, renderer);
		kiss_selectbutton_draw(&select1, renderer);
		kiss_label_draw(&label1, renderer);

		SDL_RenderPresent(renderer);
		draw = 0;
	}
	kiss_clean(&objects);
	return 0;
}