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); }
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(); }
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 }
/** * 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); }
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; }
// ------------------------------------------------------------------------------------------------ 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; }
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 }
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; }