diff --git a/github_bad/EXAMPLES_C++/jetgpio_PWM_example.cpp b/github_bad/EXAMPLES_C++/jetgpio_PWM_example.cpp deleted file mode 100644 index 2aae782..0000000 --- a/github_bad/EXAMPLES_C++/jetgpio_PWM_example.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: g++ -Wall -o jetgpio_PWM_example jetgpio_PWM_example.cpp -ljetgpio - * Execute with: sudo ./jetgpio_PWM_example - */ - -#include -#include -#include - -int main(int argc, char *argv[]) -{ - int Init; - - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - -/* Setting up PWM frequency=10kHz @ pin 32 */ - - int PWMstat = gpioSetPWMfrequency(32, 10000); - - if (PWMstat < 0) - { - /* PWM frequency set up failed */ - printf("PWM frequency set up failed. Error code: %d\n", PWMstat); - exit(Init); - } - else - { - /* PWM frequency set up okay*/ - printf("PWM frequency set up okay at pin 32. Return code: %d\n", PWMstat); - } - /* Set up PWM duty cycle to approx 50% (0=0% to 256=100%) @ pin 32*/ - int PWMstat2 = gpioPWM(32, 127); - - if (PWMstat2 < 0) - { - /* PWM start on failed */ - printf("PWM start failed. Error code: %d\n", PWMstat2); - exit(Init); - } - else - { - /* PWM started on okay*/ - printf("PWM started up okay at pin 32. Return code: %d\n", PWMstat2); - } - - int x =0; - printf("PWM going at pin 32 for 60 seconds\n"); - while (x<30) { - sleep(2); - x++; - } - // Terminating library - gpioTerminate(); - printf("PWM stopped, bye!\n"); - exit(0); - -} - diff --git a/github_bad/EXAMPLES_C++/jetgpio_edge.cpp b/github_bad/EXAMPLES_C++/jetgpio_edge.cpp deleted file mode 100644 index 5a3df0e..0000000 --- a/github_bad/EXAMPLES_C++/jetgpio_edge.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: g++ -Wall -o jetgpio_edge jetgpio_edge.cpp -ljetgpio - * Execute with: sudo ./jetgpio_edge - */ - -#include -#include -#include /* for catching exceptions e.g. control-C*/ -#include - - -/* Global variable to interrupt the loop later on*/ -static volatile int interrupt = 1; -unsigned long timestamp; - -/* Ctrl-c signal function handler */ -void inthandler(int signum) -{ - usleep(1000); - printf("\nCaught Ctrl-c, coming out ...\n"); - interrupt = 0; -} - -/* Function to be called upon if edge is detected */ -void calling() -{ - printf("edge detected with EPOCH timestamp: %lu\n", timestamp); - // terminating while loop - //interrupt = 0; -} - -int main(int argc, char *argv[]) -{ - int Init; - -/* Capture Ctrl-c */ - signal(SIGINT, inthandler); - - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - -// Setting up pin 3 as INPUT first - int stat = gpioSetMode(3, JET_INPUT); - if (stat < 0) - { - // gpio setting up failed - printf("gpio setting up failed. Error code: %d\n", stat); - exit(Init); - } - else - { - // gpio setting up okay - printf("gpio setting up okay. Return code: %d\n", stat); - } - - // Now setting up pin 3 to detect edges, rising & falling edge with a 1000 useconds debouncing and when event is detected calling func "calling" - int stat2 = gpioSetISRFunc(3, EITHER_EDGE, 1000, ×tamp, &calling); - if (stat2 < 0) - { - /* gpio setting up failed */ - printf("gpio edge setting up failed. Error code: %d\n", stat2); - exit(Init); - } - else - { - /* gpio setting up okay*/ - printf("gpio edge setting up okay. Return code: %d\n", stat2); - } - - /* Now wait for the edge to be detected */ - printf("Capturing edges, press Ctrl-c to terminate\n"); - while (interrupt) { - // Do some stuff - sleep(1); - } - // Terminating library - gpioTerminate(); - exit(0); -} - diff --git a/github_bad/EXAMPLES_C++/jetgpio_example.cpp b/github_bad/EXAMPLES_C++/jetgpio_example.cpp deleted file mode 100644 index b98b977..0000000 --- a/github_bad/EXAMPLES_C++/jetgpio_example.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: g++ -Wall -o jetgpio_example jetgpio_example.cpp -ljetgpio - * Execute with: sudo ./jetgpio_example - */ - -#include -#include -#include - -int main(int argc, char *argv[]) -{ - int Init; - - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - - // Setting up pin 3 as OUTPUT and 7 as INPUT - int stat1 = gpioSetMode(3, JET_OUTPUT); - if (stat1 < 0) - { - /* gpio setting up failed */ - printf("gpio setting up failed. Error code: %d\n", stat1); - exit(Init); - } - else - { - /* gpio setting up okay*/ - printf("gpio setting up okay. Return code: %d\n", stat1); - } - - int stat2 = gpioSetMode(7, JET_INPUT); - if (stat2 < 0) - { - /* gpio setting up failed */ - printf("gpio setting up failed. Error code: %d\n", stat2); - exit(Init); - } - else - { - /* gpio setting up okay*/ - printf("gpio setting up okay. Return code: %d\n", stat2); - } - - // Writing 1 and 0 to pin 3 at 1 second intervals while reading pin 7 - int x =0; - int level = 0; - while (x<5) { - gpioWrite(3, 1); - usleep(1000); - level = gpioRead(7); - printf("level: %d\n",level); - sleep(1); - gpioWrite(3, 0); - usleep(1000); - level = gpioRead(7); - printf("level: %d\n",level); - sleep(1); - x++; - } - - // Terminating library - gpioTerminate(); - - exit(0); - -} - diff --git a/github_bad/EXAMPLES_C++/jetgpio_i2c_example.cpp b/github_bad/EXAMPLES_C++/jetgpio_i2c_example.cpp deleted file mode 100644 index e7ffdfa..0000000 --- a/github_bad/EXAMPLES_C++/jetgpio_i2c_example.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: g++ -Wall -o jetgpio_i2c_example jetgpio_i2c_example.cpp -ljetgpio - * Execute with: sudo ./jetgpio_i2c_example - */ - -#include -#include -#include - -int main(int argc, char *argv[]) -{ - int Init; - int gyro_x_H = 0; - int gyro_x_L = 0; - float gyro_x = 0; - int gyro_y_H = 0; - int gyro_y_L = 0; - float gyro_y = 0; - int gyro_z_H = 0; - int gyro_z_L = 0; - float gyro_z = 0; - -/* MPU-6050 Registers */ - const int MPU6050_SLAVE_ADDRESS = 0x68; - const int PWR_MGMT_1 = 0x6B; - const int ACCEL_CONFIG = 0x1C; - const int ACCEL_RANGE_4G = 0x08; - const int GYRO_CONFIG = 0x1B; - const int GYRO_RANGE_250DEG = 0x00; - const float GYRO_SCALE_MODIFIER_250DEG = 131.0; - const int GYRO_XOUT0 = 0x43; - const int GYRO_YOUT0 = 0x45; - const int GYRO_ZOUT0 = 0x47; - - - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - - /* Opening the connection to the I2C slave MPU6050 */ - int MPU6050 = i2cOpen(0,0); - - if (MPU6050 >= 0) - { - /* Opening I2C port OK*/ - printf("Open I2C port OK. Return code: %d\n", MPU6050); - printf("MPU6050 number handler: %d\n", MPU6050); - } - else - { - /* Problems opening I2C port*/ - printf("Open I2C port failed. Quitting MPU6050 Error code: %d\n", MPU6050); - } - - /* Wake up the MPU-6050 with slave address 0x68 since it starts in sleep mode */ - int writestat = i2cWriteByteData(MPU6050, MPU6050_SLAVE_ADDRESS, PWR_MGMT_1, 0x00); - printf("write return: %d\n",writestat); - usleep(100000); - - /* Now set up the accelerator range to 4G */ - writestat = i2cWriteByteData(MPU6050, MPU6050_SLAVE_ADDRESS, ACCEL_CONFIG, ACCEL_RANGE_4G); - printf("write return: %d\n",writestat); - usleep(100000); - - /* Now set up the gyroscope range to 250 deg/second */ - writestat = i2cWriteByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_CONFIG, GYRO_RANGE_250DEG); - printf("write return: %d\n",writestat); - usleep(100000); - - int x = 0; - - while (x<1000) { - - // Reading gyroscope values - gyro_x_H = i2cReadByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_XOUT0); /* getting the H register 15:8 */ - gyro_x_L = i2cReadByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_XOUT0+1); /* getting the L register 7:0 */ - gyro_x = (gyro_x_H << 8) + gyro_x_L; - if (gyro_x >= 0x8000) - { - gyro_x = -(65535 - gyro_x) + 1; - } - gyro_x = gyro_x/GYRO_SCALE_MODIFIER_250DEG; - printf("gyro_x: %f\n",gyro_x); - - - gyro_y_H = i2cReadByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_YOUT0); /* getting the H register 15:8 */ - gyro_y_L = i2cReadByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_YOUT0+1); /* getting the L register 7:0 */ - gyro_y = (gyro_y_H << 8) + gyro_y_L; - if (gyro_y >= 0x8000) - { - gyro_y = -(65535 - gyro_y) + 1; - } - gyro_y = gyro_y/GYRO_SCALE_MODIFIER_250DEG; - printf("gyro_y: %f\n",gyro_y); - - - gyro_z_H = i2cReadByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_ZOUT0); /* getting the H register 15:8 */ - gyro_z_L = i2cReadByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_ZOUT0+1); /* getting the L register 7:0 */ - gyro_z = (gyro_z_H << 8) + gyro_z_L; - if (gyro_z >= 0x8000) - { - gyro_z = -(65535 - gyro_z) + 1; - } - gyro_z = gyro_z/GYRO_SCALE_MODIFIER_250DEG; - printf("gyro_z: %f\n",gyro_z); - - usleep(10000); - x++; - } - - /* Closing i2c connection */ - int i2cstat = i2cClose(MPU6050); - - if (i2cstat >= 0) - { - /* I2C port closed OK*/ - printf("Closing I2C port OK. Return code: %d\n", i2cstat); - } - else - { - /* Not possible to close I2C port */ - printf("Closing I2C port failed. Quitting MPU6050 thread Error code: %d\n", i2cstat); - } - - /* Terminating library */ - gpioTerminate(); - exit(0); - -} - diff --git a/github_bad/EXAMPLES_C++/lcd_i2c.cpp b/github_bad/EXAMPLES_C++/lcd_i2c.cpp deleted file mode 100644 index 165f2eb..0000000 --- a/github_bad/EXAMPLES_C++/lcd_i2c.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: g++ -Wall -o lcd_i2c lcd_i2c.cpp -ljetgpio - * Execute with: sudo ./lcd_i2c - */ - -#include -#include -#include -#include - -void send_command(unsigned handle, unsigned i2cAddr, unsigned command){ - unsigned buffer = command & 0xF0; - buffer |= 0x04; - unsigned buffer2 = buffer; - buffer |= 0x08; - i2cWriteByteData(handle, i2cAddr, buffer, 0x0); - usleep(2000); - buffer2 &= 0xFB; - buffer2 |= 0x08; - i2cWriteByteData(handle, i2cAddr, buffer2, 0x0); - buffer = (command & 0x0F) << 4; - buffer |= 0x04; - buffer2 = buffer; - buffer |= 0x08; - i2cWriteByteData(handle, i2cAddr, buffer, 0x0); - usleep(2000); - buffer2 &= 0xFB; - buffer2 |= 0x08; - i2cWriteByteData(handle, i2cAddr, buffer2, 0x0); -} - -void send_data(unsigned handle, unsigned i2cAddr, unsigned data){ - unsigned buffer = data & 0xF0; - buffer |= 0x05; - unsigned buffer2 = buffer; - buffer |= 0x08; - buffer2 &= 0xFB; - buffer2 |= 0x08; - i2cWriteByteData(handle, i2cAddr, buffer, buffer2); - buffer = (data & 0x0F) << 4; - buffer |= 0x05; - buffer2 = buffer; - buffer |= 0x08; - buffer2 &= 0xFB; - buffer2 |= 0x08; - i2cWriteByteData(handle, i2cAddr, buffer, buffer2); -} - -int main(int argc, char *argv[]){ - - const int LCD_SLAVE_ADDRESS = 0x3f; - - printf("This will print something on a Freenove i2c 1602 LCD connected to pins 3,5 and it will stay until LCD reset\n"); - - gpioInitialise(); - - // Opening the connection to the LCD I2C slave 0x3f, i2c port 1 (pins 3/5), flags = 0 (100 kHz) - - int lcd = i2cOpen(1,0); - - // Now setting stuff up, device has not register map, all characters are sent as is, not to a specific register address - // the trick here is to send the same stuff twice for commands and for characters just once and then a 0, which does nothing - send_command(lcd, LCD_SLAVE_ADDRESS, 0x33); - usleep(5000); - send_command(lcd, LCD_SLAVE_ADDRESS, 0x32); - usleep(5000); - send_command(lcd, LCD_SLAVE_ADDRESS, 0x28); - usleep(5000); - send_command(lcd, LCD_SLAVE_ADDRESS, 0x0C); - usleep(5000); - send_command(lcd, LCD_SLAVE_ADDRESS, 0x01); - usleep(5000); - i2cWriteByteData(lcd, LCD_SLAVE_ADDRESS, 0x08, 0x0); - - //Now can start writing to the lcd screen, starting at position 0,0 first line ot the left - char message[16] = {"Jetgpio"}; - char message2[16] = {" by Rubberazer"}; - - send_command(lcd, LCD_SLAVE_ADDRESS, 0x80); //Positioning cursor at point 0,0 - for (size_t i=0;i -#include -#include - -int main(int argc, char *argv[]) -{ - int Init; - int SPI_init; - int SPI_stat; - char tx[7] = {0,}; - char rx[7] = {0,}; - - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - - /* Port SPI2 pins: 37, 22, 13 & 18 - to perform a simple loop test, pins 22: SPI2_MISO & 37:SPI2_MOSI should be connected - with a short jumper cable, when the cable is disconnected the output on screen will show all the rx values as zeros - spiOpen() parameters go as follows: spiOpen(port number, speed in Hz, mode, cs pin delay in us, - bits per word, least significant bit first, cs change) - */ - - SPI_init = spiOpen(1, 5000000, 0, 0, 8, 1, 1); - if (SPI_init < 0) - { - /* Port SPI2 opening failed */ - printf("Port SPI2 opening failed. Error code: %d\n", SPI_init); - exit(Init); - } - else - { - /* Port SPI2 opened okay*/ - printf("Port SPI2 opened OK. Return code: %d\n", SPI_init); - } - - tx[0] = 0xFF; - tx[1] = 0xAA; - tx[2] = 0xBB; - tx[3] = 0xCC; - tx[4] = 0xDD; - tx[5] = 0xFF; - tx[6] = 0x11; - - //Transfer data - int i = 0; - while (i<20){ - - SPI_stat = spiXfer(SPI_init, tx, rx, 7); - - if (SPI_stat < 0) - { - /* Spi transfer failed */ - printf("Spi port transfer failed. Error code: %d\n", SPI_stat); - exit(Init); - } - else - { - /* Spi transfer okay*/ - printf("Spi port transfer OK. Return code: %d\n", SPI_stat); - } - - printf("tx0:%x --> rx0:%x\n",tx[0], rx[0]); - printf("tx1:%x --> rx1:%x\n",tx[1], rx[1]); - printf("tx2:%x --> rx2:%x\n",tx[2], rx[2]); - printf("tx3:%x --> rx3:%x\n",tx[3], rx[3]); - printf("tx4:%x --> rx4:%x\n",tx[4], rx[4]); - printf("tx5:%x --> rx5:%x\n",tx[5], rx[5]); - printf("tx6:%x --> rx6:%x\n",tx[6], rx[6]); - - rx[0] = 0; - rx[1] = 0; - rx[2] = 0; - rx[3] = 0; - rx[4] = 0; - rx[5] = 0; - rx[6] = 0; - - i++; - sleep(1); - } - - // Closing spi port - spiClose(SPI_init); - - // Terminating library - gpioTerminate(); - - exit(0); -} diff --git a/github_bad/EXAMPLES_C++/test_PWM.cpp b/github_bad/EXAMPLES_C++/test_PWM.cpp deleted file mode 100644 index 0d79734..0000000 --- a/github_bad/EXAMPLES_C++/test_PWM.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: g++ -Wall -o test_PWM test_PWM.cpp -ljetgpio - * Execute with: sudo ./test_PWM - */ - -#include -#include -#include /* for catching exceptions e.g. control-C*/ -#include - -void inthandler(int signum) -{ - usleep(1500); - gpioTerminate(); - printf("Caught signal %d, coming out ...\n", signum); - exit(1); -} - -int main(int argc, char *argv[]) -{ - int Init; - int status; - signal(SIGINT, inthandler); - signal(SIGHUP, inthandler); - signal(SIGABRT, inthandler); - signal(SIGILL, inthandler); - signal(SIGSEGV, inthandler); - signal(SIGTERM, inthandler); - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - - gpioSetPWMfrequency(33, 1000); - - gpioPWM(33, 0); - - int x = 0; - - int level = 0; - - // Increase brightness - while (x<=256) { - - usleep(100000); - - level = x; - - printf("level: %d - ",level); - - status = gpioPWM(33, x); - - printf("status: %d\n",status); - - usleep(100000); - - x=x+1; - } - - x = 256; - - // Decrease brightness - while (x>=0) { - - usleep(100000); - - level = x; - - printf("level: %d - ",level); - - status = gpioPWM(33, x); - - printf("status: %d\n",status); - - usleep(100000); - - x=x-1; - - } - gpioTerminate(); - exit(0); -} diff --git a/github_bad/EXAMPLES_C/jetgpio_PWM_example.c b/github_bad/EXAMPLES_C/jetgpio_PWM_example.c deleted file mode 100644 index f6b18cd..0000000 --- a/github_bad/EXAMPLES_C/jetgpio_PWM_example.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: gcc -Wall -o jetgpio_PWM_example jetgpio_PWM_example.c -ljetgpio - * Execute with: sudo ./jetgpio_PWM_example - */ - -#include -#include -#include -#include -#include - -int main(int argc, char *argv[]) { - int Init; - - Init = gpioInitialise(); - if (Init < 0) { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - - /* Setting up PWM frequency=10kHz @ pin 32 */ - - int PWMstat = gpioSetPWMfrequency(32, 10000); - - if (PWMstat < 0) { - /* PWM frequency set up failed */ - printf("PWM frequency set up failed. Error code: %d\n", PWMstat); - exit(Init); - } - else { - /* PWM frequency set up okay*/ - printf("PWM frequency set up okay at pin 32. Return code: %d\n", PWMstat); - } - /* Set up PWM duty cycle to approx 50% (0=0% to 256=100%) @ pin 32*/ - - int PWMstat2 = gpioPWM(32, 128); - - if (PWMstat2 < 0) { - /* PWM start on failed */ - printf("PWM start failed. Error code: %d\n", PWMstat2); - exit(Init); - } - else { - /* PWM started on okay*/ - printf("PWM started up okay at pin 32. Return code: %d\n", PWMstat2); - } - - int x =0; - printf("PWM going at pin 32 for 60 seconds\n"); - while (x<30) { - sleep(2); - x++; - } - // Terminating library - gpioTerminate(); - printf("PWM stopped, bye!\n"); - exit(0); -} - diff --git a/github_bad/EXAMPLES_C/jetgpio_edge.c b/github_bad/EXAMPLES_C/jetgpio_edge.c deleted file mode 100644 index 5dc1009..0000000 --- a/github_bad/EXAMPLES_C/jetgpio_edge.c +++ /dev/null @@ -1,91 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: gcc -Wall -o jetgpio_edge jetgpio_edge.c -ljetgpio - * Execute with: sudo ./jetgpio_edge - */ - -#include -#include -#include -#include -#include /* for catching exceptions e.g. control-C*/ -#include - -/* Global variable to interrupt the loop later on*/ -static volatile int interrupt = 1; -unsigned long timestamp; - -/* Ctrl-c signal function handler */ -void inthandler(int signum) -{ - usleep(1000); - printf("\nCaught Ctrl-c, coming out ...\n"); - interrupt = 0; -} - -/* Function to be called upon if edge is detected */ -void calling() -{ - printf("edge detected with EPOCH timestamp: %lu\n", timestamp); - // terminating while loop - //interrupt = 0; -} - -int main(int argc, char *argv[]) -{ - int Init; - - /* Capture Ctrl-c */ - signal(SIGINT, inthandler); - - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - - // Setting up pin 3 as INPUT first - int stat = gpioSetMode(3, JET_INPUT); - if (stat < 0) - { - // gpio setting up failed - printf("gpio setting up failed. Error code: %d\n", stat); - exit(Init); - } - else - { - // gpio setting up okay - printf("gpio setting up okay. Return code: %d\n", stat); - } - - // Now setting up pin 3 to detect edges, rising & falling edge with a 1000 useconds debouncing and when event is detected calling func "calling" - int stat2 = gpioSetISRFunc(3, EITHER_EDGE, 1000, ×tamp, &calling); - if (stat2 < 0) - { - /* gpio setting up failed */ - printf("gpio edge setting up failed. Error code: %d\n", stat2); - exit(Init); - } - else - { - /* gpio setting up okay*/ - printf("gpio edge setting up okay. Return code: %d\n", stat2); - } - - /* Now wait for the edge to be detected */ - printf("Capturing edges, press Ctrl-c to terminate\n"); - while (interrupt) { - // Do some stuff - sleep(1); - } - // Terminating library - gpioTerminate(); - exit(0); -} - diff --git a/github_bad/EXAMPLES_C/jetgpio_example.c b/github_bad/EXAMPLES_C/jetgpio_example.c deleted file mode 100644 index 9865e63..0000000 --- a/github_bad/EXAMPLES_C/jetgpio_example.c +++ /dev/null @@ -1,80 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: gcc -Wall -o jetgpio_example jetgpio_example.c -ljetgpio - * Execute with: sudo ./jetgpio_example - */ - -#include -#include -#include -#include -#include - -int main(int argc, char *argv[]) -{ - int Init; - - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - - // Setting up pin 3 as OUTPUT and 7 as INPUT - - int stat1 = gpioSetMode(3, JET_OUTPUT); - if (stat1 < 0) - { - /* gpio setting up failed */ - printf("gpio setting up failed. Error code: %d\n", stat1); - exit(Init); - } - else - { - /* gpio setting up okay*/ - printf("gpio setting up okay. Return code: %d\n", stat1); - } - - int stat2 = gpioSetMode(7, JET_INPUT); - if (stat2 < 0) - { - /* gpio setting up failed */ - printf("gpio setting up failed. Error code: %d\n", stat2); - exit(Init); - } - else - { - /* gpio setting up okay*/ - printf("gpio setting up okay. Return code: %d\n", stat2); - } - - // Writing 1 and 0 to pin 3 a 1 second intervals while reading pin 7 - int x =0; - int level = 0; - while (x<5) { - gpioWrite(3, 1); - usleep(1000); - level = gpioRead(7); - printf("level: %d\n",level); - sleep(1); - gpioWrite(3, 0); - usleep(1000); - level = gpioRead(7); - printf("level: %d\n",level); - sleep(1); - x++; - } - - // Terminating library - gpioTerminate(); - - exit(0); - -} - diff --git a/github_bad/EXAMPLES_C/jetgpio_i2c_example.c b/github_bad/EXAMPLES_C/jetgpio_i2c_example.c deleted file mode 100644 index 7f6f080..0000000 --- a/github_bad/EXAMPLES_C/jetgpio_i2c_example.c +++ /dev/null @@ -1,141 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: gcc -Wall -o jetgpio_i2c_example jetgpio_i2c_example.c -ljetgpio - * Execute with: sudo ./jetgpio_i2c_example - */ - -#include -#include -#include -#include -#include - -int main(int argc, char *argv[]) -{ - int Init; - int gyro_x_H = 0; - int gyro_x_L = 0; - float gyro_x = 0; - int gyro_y_H = 0; - int gyro_y_L = 0; - float gyro_y = 0; - int gyro_z_H = 0; - int gyro_z_L = 0; - float gyro_z = 0; - - /* MPU-6050 Registers */ - const int MPU6050_SLAVE_ADDRESS = 0x68; - const int PWR_MGMT_1 = 0x6B; - const int ACCEL_CONFIG = 0x1C; - const int ACCEL_RANGE_4G = 0x08; - const int GYRO_CONFIG = 0x1B; - const int GYRO_RANGE_250DEG = 0x00; - const float GYRO_SCALE_MODIFIER_250DEG = 131.0; - const int GYRO_XOUT0 = 0x43; - const int GYRO_YOUT0 = 0x45; - const int GYRO_ZOUT0 = 0x47; - - - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - - /* Opening the connection to the I2C slave MPU6050 */ - int MPU6050 = i2cOpen(0,0); - - if (MPU6050 >= 0) - { - /* Opening I2C port OK*/ - printf("Open I2C port OK. Return code: %d\n", MPU6050); - printf("MPU6050 number handler: %d\n", MPU6050); - } - else - { - /* Problems opening I2C port*/ - printf("Open I2C port failed. Quitting MPU6050 Error code: %d\n", MPU6050); - } - - /* Wake up the MPU-6050 with slave address 0x68 since it starts in sleep mode */ - int writestat = i2cWriteByteData(MPU6050, MPU6050_SLAVE_ADDRESS, PWR_MGMT_1, 0x00); - printf("write return: %d\n",writestat); - usleep(100000); - - /* Now set up the accelerator range to 4G */ - writestat = i2cWriteByteData(MPU6050, MPU6050_SLAVE_ADDRESS, ACCEL_CONFIG, ACCEL_RANGE_4G); - printf("write return: %d\n",writestat); - usleep(100000); - - /* Now set up the gyroscope range to 250 deg/second */ - writestat = i2cWriteByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_CONFIG, GYRO_RANGE_250DEG); - printf("write return: %d\n",writestat); - usleep(100000); - - int x = 0; - - while (x<1000) { - - // Reading gyroscope values - gyro_x_H = i2cReadByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_XOUT0); /* getting the H register 15:8 */ - gyro_x_L = i2cReadByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_XOUT0+1); /* getting the L register 7:0 */ - gyro_x = (gyro_x_H << 8) + gyro_x_L; - if (gyro_x >= 0x8000) - { - gyro_x = -(65535 - gyro_x) + 1; - } - gyro_x = gyro_x/GYRO_SCALE_MODIFIER_250DEG; - printf("gyro_x: %f\n",gyro_x); - - - gyro_y_H = i2cReadByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_YOUT0); /* getting the H register 15:8 */ - gyro_y_L = i2cReadByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_YOUT0+1); /* getting the L register 7:0 */ - gyro_y = (gyro_y_H << 8) + gyro_y_L; - if (gyro_y >= 0x8000) - { - gyro_y = -(65535 - gyro_y) + 1; - } - gyro_y = gyro_y/GYRO_SCALE_MODIFIER_250DEG; - printf("gyro_y: %f\n",gyro_y); - - - gyro_z_H = i2cReadByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_ZOUT0); /* getting the H register 15:8 */ - gyro_z_L = i2cReadByteData(MPU6050, MPU6050_SLAVE_ADDRESS, GYRO_ZOUT0+1); /* getting the L register 7:0 */ - gyro_z = (gyro_z_H << 8) + gyro_z_L; - if (gyro_z >= 0x8000) - { - gyro_z = -(65535 - gyro_z) + 1; - } - gyro_z = gyro_z/GYRO_SCALE_MODIFIER_250DEG; - printf("gyro_z: %f\n",gyro_z); - - usleep(10000); - x++; - } - - /* Closing i2c connection */ - int i2cstat = i2cClose(MPU6050); - - if (i2cstat >= 0) - { - /* I2C port closed OK*/ - printf("Closing I2C port OK. Return code: %d\n", i2cstat); - } - else - { - /* Not possible to close I2C port */ - printf("Closing I2C port failed. Quitting MPU6050 thread Error code: %d\n", i2cstat); - } - - /* Terminating library */ - gpioTerminate(); - exit(0); - -} - diff --git a/github_bad/EXAMPLES_C/jetgpio_output.c b/github_bad/EXAMPLES_C/jetgpio_output.c deleted file mode 100644 index 4f47de2..0000000 --- a/github_bad/EXAMPLES_C/jetgpio_output.c +++ /dev/null @@ -1,64 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: gcc -Wall -o jetgpio_output jetgpio_output.c -ljetgpio - * Execute with: sudo ./jetgpio_output - */ - -#include -#include -#include -#include -#include -#include -#include - -/* Global variable to interrupt the loop later on*/ -static volatile int interrupt = 1; - -/* Ctrl-c signal function handler */ -void inthandler(int signum) -{ - usleep(1000); - printf("\nCaught Ctrl-c, coming out ...\n"); - interrupt = 0; -} - -int main(int argc, char *argv[]) -{ - int Init; - - /* Capture Ctrl-c */ - signal(SIGINT, inthandler); - - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - - // Setting up pin 38 as OUTPUT - - gpioSetMode(38, JET_OUTPUT); - - while (interrupt) { - gpioWrite(38,1); - gpioWrite(38,0); - - } - - // Pin 38 at 0 - gpioWrite(38, 0); - - // Terminating library - gpioTerminate(); - - exit(0); - -} - diff --git a/github_bad/EXAMPLES_C/jetgpio_round_trip.c b/github_bad/EXAMPLES_C/jetgpio_round_trip.c deleted file mode 100644 index 72240e1..0000000 --- a/github_bad/EXAMPLES_C/jetgpio_round_trip.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: gcc -Wall -o jetgpio_round jetgpio_round_trip.c -ljetgpio -lrt - * Execute with: sudo ./jetgpio_round - */ - -#include -#include -#include -#include -#include -#include - -#define BILLION 1000000000L - -int main(int argc, char *argv[]) -{ - int Init; - uint64_t diff; - struct timespec start, end; - - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - - // Setting up pin 38 as OUTPUT and 40 as INPUT - - gpioSetMode(38, JET_OUTPUT); - gpioSetMode(40, JET_INPUT); - - // Measuring monotonic time now - clock_gettime(CLOCK_MONOTONIC, &start); - - // Writing 1 to pin 38 - gpioWrite(38, 1); - - while (!gpioRead(40)) {} - - // Measuring monotonic time after the loop - clock_gettime(CLOCK_MONOTONIC, &end); - - // Calculating time difference for round trip e.g. time invested in activating the output + the time it takes for the input to detect the level - diff = BILLION * (end.tv_sec - start.tv_sec) + end.tv_nsec - start.tv_nsec; - printf("elapsed time = %llu nanoseconds\n", (long long unsigned int) diff); - - gpioWrite(38, 0); - - // Terminating library - gpioTerminate(); - - exit(0); - -} - diff --git a/github_bad/EXAMPLES_C/jetgpio_speed_edge.c b/github_bad/EXAMPLES_C/jetgpio_speed_edge.c deleted file mode 100644 index 3f0ca86..0000000 --- a/github_bad/EXAMPLES_C/jetgpio_speed_edge.c +++ /dev/null @@ -1,85 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: gcc -Wall -o jetgpio_speed jetgpio_speed_edge.c -ljetgpio -lrt - * Execute with: sudo ./jetgpio_speed - */ - -#include -#include -#include -#include -#include /* for catching exceptions e.g. control-C*/ -#include -#include - -#define BILLION 1000000000L - -/* Global variable to interrupt the loop later on*/ -static volatile int interrupt = 1; -unsigned long timestamp; -// To measure time -unsigned long diff; -struct timespec start; - -/* Ctrl-c signal function handler */ -void inthandler(int signum) -{ - usleep(1000); - printf("\nCaught Ctrl-c, coming out ...\n"); - interrupt = 0; -} - -/* Function to be called upon if edge is detected */ -void calling() -{ - diff = timestamp - (BILLION * (start.tv_sec) + start.tv_nsec); - printf("time stamp = %lu nanoseconds\n", timestamp); - printf("start time = %lu nanoseconds\n", (BILLION * (start.tv_sec) + start.tv_nsec)); - printf("elapsed time = %lu nanoseconds\n", diff); - // terminating while loop - interrupt = 0; -} - -int main(int argc, char *argv[]) -{ - int Init; - - /* Capture Ctrl-c */ - signal(SIGINT, inthandler); - - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - - // Setting up pin 38 as OUTPUT and 40 as INPUT - gpioSetMode(38, JET_OUTPUT); - gpioSetMode(40, JET_INPUT); - - // Now setting up pin 40 to detect rising edge - gpioSetISRFunc(40, RISING_EDGE, 0, ×tamp, &calling); - - // Measuring time now - clock_gettime(CLOCK_REALTIME, &start); - - // Writing 1 to pin 38 - gpioWrite(38, 1); - - /* Now wait for the edge to be detected - printf("Capturing edges, press Ctrl-c to terminate\n"); */ - while (interrupt) {} - - gpioWrite(38, 0); - - // Terminating library - gpioTerminate(); - exit(0); -} - diff --git a/github_bad/EXAMPLES_C/lcd_i2c.c b/github_bad/EXAMPLES_C/lcd_i2c.c deleted file mode 100644 index fb12149..0000000 --- a/github_bad/EXAMPLES_C/lcd_i2c.c +++ /dev/null @@ -1,99 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: gcc -Wall -o lcd_i2c lcd_i2c.c -ljetgpio - * Execute with: sudo ./lcd_i2c - */ - -#include -#include -#include -#include -#include -#include - -void send_command(unsigned handle, unsigned i2cAddr, unsigned command){ - unsigned buffer = command & 0xF0; - buffer |= 0x04; - unsigned buffer2 = buffer; - buffer |= 0x08; - i2cWriteByteData(handle, i2cAddr, buffer, 0x0); - usleep(2000); - buffer2 &= 0xFB; - buffer2 |= 0x08; - i2cWriteByteData(handle, i2cAddr, buffer2, 0x0); - buffer = (command & 0x0F) << 4; - buffer |= 0x04; - buffer2 = buffer; - buffer |= 0x08; - i2cWriteByteData(handle, i2cAddr, buffer, 0x0); - usleep(2000); - buffer2 &= 0xFB; - buffer2 |= 0x08; - i2cWriteByteData(handle, i2cAddr, buffer2, 0x0); -} - -void send_data(unsigned handle, unsigned i2cAddr, unsigned data){ - unsigned buffer = data & 0xF0; - buffer |= 0x05; - unsigned buffer2 = buffer; - buffer |= 0x08; - buffer2 &= 0xFB; - buffer2 |= 0x08; - i2cWriteByteData(handle, i2cAddr, buffer, buffer2); - buffer = (data & 0x0F) << 4; - buffer |= 0x05; - buffer2 = buffer; - buffer |= 0x08; - buffer2 &= 0xFB; - buffer2 |= 0x08; - i2cWriteByteData(handle, i2cAddr, buffer, buffer2); -} - -int main(int argc, char *argv[]){ - - const int LCD_SLAVE_ADDRESS = 0x3f; - - printf("This will print something on a Freenove i2c 1602 LCD connected to pins 3,5 and it will stay until LCD reset\n"); - - gpioInitialise(); - - // Opening the connection to the LCD I2C slave 0x3f, i2c port 1 (pins 3/5), flags = 0 (100 kHz) - - int lcd = i2cOpen(1,0); - - // Now setting stuff up, device has not register map, all characters are sent as is, not to a specific register address - // the trick here is to send the same stuff twice for commands and for characters just once and then a 0, which does nothing - send_command(lcd, LCD_SLAVE_ADDRESS, 0x33); - usleep(5000); - send_command(lcd, LCD_SLAVE_ADDRESS, 0x32); - usleep(5000); - send_command(lcd, LCD_SLAVE_ADDRESS, 0x28); - usleep(5000); - send_command(lcd, LCD_SLAVE_ADDRESS, 0x0C); - usleep(5000); - send_command(lcd, LCD_SLAVE_ADDRESS, 0x01); - usleep(5000); - i2cWriteByteData(lcd, LCD_SLAVE_ADDRESS, 0x08, 0x0); - - //Now can start writing to the lcd screen, starting at position 0,0 first line ot the left - char message[16] = {"Jetgpio"}; - char message2[16] = {" by Rubberazer"}; - - send_command(lcd, LCD_SLAVE_ADDRESS, 0x80); //Positioning cursor at point 0,0 - for (int i=0;i -#include -#include -#include -#include - -//Giving meaningful names to pins in the Orin -#define CS_RD 3 -#define CONVST_AB 5 -#define BUSY 7 - -//#define BILLION 1000000000L -//uint64_t diff; -//struct timespec start, end; - -int main(void) { - - int Vx = 0; - //List of AGX data pins DB0 to DB15 = pin8 to 28 - int pin_level[16] = {0}; - unsigned pin_number[16] = {8, 10, 11, 12, 13, 15, 16, 18, 19, 21, 22, 23, 24 \ - ,26, 27, 28}; - gpioInitialise(); - - //Setting BUSY and data pins as inputs - for (unsigned i = 0;i < 16; i++) { - gpioSetMode(pin_number[i], JET_INPUT); - } - gpioSetMode(BUSY, JET_INPUT); - - //Setting CS/RD and CONVSTA & B as outputs - gpioSetMode(CS_RD, JET_OUTPUT); - gpioSetMode(CONVST_AB, JET_OUTPUT); - - //Setting CONVST to low level, intial state - gpioWrite(CONVST_AB, 0); - - //Setting CS & RD to high level, output is all at tri state, initial state - gpioWrite(CS_RD, 1); - - while(1) { - //Measure how long it takes in nanoseconds - //clock_gettime(CLOCK_MONOTONIC, &start); - - Vx = 0; - - //Setting CONVST to high level, conversion starts - gpioWrite(CONVST_AB, 1); - - //Checking if BUSY is low (conversion completed) if not wait 1us - while(gpioRead(BUSY)) { - usleep(1); - } - - //Enabling data output CS/RD to 0 to move to the next value - gpioWrite(CS_RD, 0); - - - //Reading all the data inputs pins this process will take approximately 16us - for (unsigned i = 0;i < 16; i++) { - pin_level[i] = gpioRead(pin_number[i]); - } - - //Setting CS/RD to 1 - gpioWrite(CS_RD, 1); - - //Setting CONVST to 0 - gpioWrite(CONVST_AB, 0); - - //Calculating final result (sample Vx) here most significant bit is pin 15 - for (unsigned i = 0;i < 16;i++) { - - Vx |= pin_level[i] << i; - } - - printf("\r%d", Vx); - - //clock_gettime(CLOCK_MONOTONIC, &end); - //diff = BILLION * (end.tv_sec - start.tv_sec) + end.tv_nsec - start.tv_nsec; - //printf("elapsed time = %llu nanoseconds\n", (long long unsigned int) diff); - } - - gpioTerminate(); - - return 0; -} diff --git a/github_bad/EXAMPLES_C/spi_loop.c b/github_bad/EXAMPLES_C/spi_loop.c deleted file mode 100644 index 0fbe089..0000000 --- a/github_bad/EXAMPLES_C/spi_loop.c +++ /dev/null @@ -1,109 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: gcc -Wall -o spi_loop spi_loop.c -ljetgpio - * Execute with: sudo ./spi_loop - */ - -#include -#include -#include -#include -#include -#include - -int main(int argc, char *argv[]) -{ - int Init; - int SPI_init; - int SPI_stat; - char tx[7] = {0,}; - char rx[7] = {0,}; - - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - - /* Port SPI2 pins: 37, 22, 13 & 18 - to perform a simple loop test, pins 22: SPI2_MISO & 37:SPI2_MOSI should be connected - with a short jumper cable, when the cable is disconnected the output on screen will show - all the rx values as zeros - spiOpen() parameters go as follows: spiOpen(port number, speed in Hz, mode, cs pin delay in us, - bits per word, least significant bit first, cs change) - */ - - SPI_init = spiOpen(1, 5000000, 0, 0, 8, 1, 1); - if (SPI_init < 0) - { - /* Port SPI2 opening failed */ - printf("Port SPI2 opening failed. Error code: %d\n", SPI_init); - exit(Init); - } - else - { - /* Port SPI2 opened okay*/ - printf("Port SPI2 opened OK. Return code: %d\n", SPI_init); - } - - tx[0] = 0xFF; - tx[1] = 0xAA; - tx[2] = 0xBB; - tx[3] = 0xCC; - tx[4] = 0xDD; - tx[5] = 0xFF; - tx[6] = 0x11; - - //Transfer data - - int i = 0; - while (i<20){ - - SPI_stat = spiXfer(SPI_init, tx, rx, 7); - - if (SPI_stat < 0) - { - /* Spi transfer failed */ - printf("Spi port transfer failed. Error code: %d\n", SPI_stat); - exit(Init); - } - else - { - /* Spi transfer okay*/ - printf("Spi port transfer OK. Return code: %d\n", SPI_stat); - } - - printf("tx0:%x --> rx0:%x\n",tx[0], rx[0]); - printf("tx1:%x --> rx1:%x\n",tx[1], rx[1]); - printf("tx2:%x --> rx2:%x\n",tx[2], rx[2]); - printf("tx3:%x --> rx3:%x\n",tx[3], rx[3]); - printf("tx4:%x --> rx4:%x\n",tx[4], rx[4]); - printf("tx5:%x --> rx5:%x\n",tx[5], rx[5]); - printf("tx6:%x --> rx6:%x\n",tx[6], rx[6]); - - rx[0] = 0; - rx[1] = 0; - rx[2] = 0; - rx[3] = 0; - rx[4] = 0; - rx[5] = 0; - rx[6] = 0; - - i++; - sleep(1); - } - - // Closing spi port - spiClose(SPI_init); - - // Terminating library - gpioTerminate(); - - exit(0); -} diff --git a/github_bad/EXAMPLES_C/test_PWM.c b/github_bad/EXAMPLES_C/test_PWM.c deleted file mode 100644 index 0d0cba5..0000000 --- a/github_bad/EXAMPLES_C/test_PWM.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Usage example of the JETGPIO library - * Compile with: gcc -Wall -o test_PWM test_PWM.c -ljetgpio - * Execute with: sudo ./test_PWM - */ - -#include -#include -#include -#include -#include /* for catching exceptions e.g. control-C*/ -#include - -void inthandler(int signum) -{ - usleep(1500); - gpioTerminate(); - printf("Caught signal %d, coming out ...\n", signum); - exit(1); -} - -int main(int argc, char *argv[]) -{ - int Init; - int status; - signal(SIGINT, inthandler); - signal(SIGHUP, inthandler); - signal(SIGABRT, inthandler); - signal(SIGILL, inthandler); - signal(SIGSEGV, inthandler); - signal(SIGTERM, inthandler); - Init = gpioInitialise(); - if (Init < 0) - { - /* jetgpio initialisation failed */ - printf("Jetgpio initialisation failed. Error code: %d\n", Init); - exit(Init); - } - else - { - /* jetgpio initialised okay*/ - printf("Jetgpio initialisation OK. Return code: %d\n", Init); - } - - gpioSetPWMfrequency(32, 1000); - - gpioPWM(32, 0); - - int x = 0; - - int level = 0; - - // Increase brightness - while (x<=256) { - - usleep(100000); - - level = x; - - printf("level: %d - ",level); - - status = gpioPWM(32, x); - - printf("status: %d\n",status); - - usleep(100000); - - x=x+1; - } - - x = 256; - - // Decrease brightness - while (x>=0) { - - usleep(100000); - - level = x; - - printf("level: %d - ",level); - - status = gpioPWM(32, x); - - printf("status: %d\n",status); - - usleep(100000); - - x=x-1; - - } - gpioTerminate(); - exit(0); -} diff --git a/github_bad/EXAMPLES_Zig/jetgpio_PWM_example.zig b/github_bad/EXAMPLES_Zig/jetgpio_PWM_example.zig deleted file mode 100644 index 18e5c0f..0000000 --- a/github_bad/EXAMPLES_Zig/jetgpio_PWM_example.zig +++ /dev/null @@ -1,45 +0,0 @@ -// Usage example of the JETGPIO library -// Compile with: zig build-exe jetgpio_PWM_example.zig -ljetgpio -lc -// Execute with: sudo ./jetgpio_PWM_example - -const std = @import("std"); -const jetgpio = @cImport({ - @cInclude("jetgpio.h"); -}); - -pub fn main() !void { - const init = jetgpio.gpioInitialise(); - - if (init < 0) { - std.debug.print("Error initiating jetgpio: {}\n", .{init}); - std.process.exit(1); - } - - // Setting up PWM frequency=10kHz @ pin 32 - - const PWMstat = jetgpio.gpioSetPWMfrequency(32, 10000); - if (PWMstat < 0) { - std.debug.print("PWM frequency set up failed. Error code: {}\n", .{PWMstat}); - std.process.exit(1); - } - - // Set up PWM duty cycle to approx 50% (0=0% to 256=100%) @ pin 32 - - const PWMstat2 = jetgpio.gpioPWM(32, 128); - - if (PWMstat2 < 0) { - std.debug.print("PWM start failed. Error code: {}\n", .{PWMstat2}); - std.process.exit(1); - } - - var x: i32 = 0; - std.debug.print("PWM going at pin 32 for 60 seconds\n", .{}); - - while (x < 30) { - std.time.sleep(2000000000); - x += 1; - } - - // Terminating library - jetgpio.gpioTerminate(); -} diff --git a/github_bad/EXAMPLES_Zig/jetgpio_edge.zig b/github_bad/EXAMPLES_Zig/jetgpio_edge.zig deleted file mode 100644 index ec12402..0000000 --- a/github_bad/EXAMPLES_Zig/jetgpio_edge.zig +++ /dev/null @@ -1,56 +0,0 @@ -// Usage example of the JETGPIO library -// Compile with: zig build-exe jetgpio_edge.zig -ljetgpio -lc -// Execute with: sudo ./jetgpio_edge - -const std = @import("std"); -const jetgpio = @cImport({ - @cInclude("jetgpio.h"); -}); -const c = @cImport({ - @cInclude("signal.h"); -}); - -// Global variable to interrupt the loop later on -var interrupt: bool = true; -// Global variable timestamp -var timestamp: u64 = 0; - -// Ctrl-c signal function handler -fn inthandler(_: c_int) callconv(.C) void { - std.time.sleep(1000000); - std.debug.print("\nCaught Ctrl-c, coming out ...\n", .{}); - interrupt = false; -} - -// Function to be called upon if edge is detected -fn calling(...) callconv(.C) void { - std.debug.print("edge detected with EPOCH timestamp: {}\n", .{timestamp}); -} - -pub fn main() !void { - - // Capture Ctrl-c - _ = c.signal(c.SIGINT, &inthandler); - - const init = jetgpio.gpioInitialise(); - - if (init < 0) { - std.debug.print("Error initiating jetgpio\n", .{}); - } - - // Setting up pin 3 as input - const set1 = jetgpio.gpioSetMode(3, jetgpio.JET_INPUT); - if (set1 < 0) { - std.debug.print("Error setting pin 3\n", .{}); - } - - // Now setting up pin 3 to detect edges, rising & falling edge with a 1000 useconds debouncing and when event is detected calling func "calling" - _ = jetgpio.gpioSetISRFunc(3, jetgpio.EITHER_EDGE, 1000, ×tamp, calling); - - while (interrupt) { - std.time.sleep(1000000000); - } - - // Terminating library - jetgpio.gpioTerminate(); -} diff --git a/github_bad/EXAMPLES_Zig/jetgpio_example.zig b/github_bad/EXAMPLES_Zig/jetgpio_example.zig deleted file mode 100644 index d7c24a3..0000000 --- a/github_bad/EXAMPLES_Zig/jetgpio_example.zig +++ /dev/null @@ -1,46 +0,0 @@ -// Usage example of the JETGPIO library -// Compile with: zig build-exe jetgpio_example.zig -ljetgpio -lc -// Execute with: sudo ./jetgpio_example - -const std = @import("std"); -const jetgpio = @cImport({ - @cInclude("jetgpio.h"); -}); - -pub fn main() !void { - const init = jetgpio.gpioInitialise(); - - if (init < 0) { - std.debug.print("Error initiating jetgpio\n", .{}); - } - // Setting up pin 3 as output - const set1 = jetgpio.gpioSetMode(3, jetgpio.JET_OUTPUT); - if (set1 < 0) { - std.debug.print("Error setting pin 3\n", .{}); - } - - // Setting up pin 7 as input - const set2 = jetgpio.gpioSetMode(7, jetgpio.JET_INPUT); - if (set2 < 0) { - std.debug.print("Error setting pin 7\n", .{}); - } - - // Writing 1 and 0 to pin 3 a 1 second intervals while reading pin 7 - var i: u8 = 0; - var level: i32 = 0; - var ret: i32 = 0; - while (i < 5) { - ret = jetgpio.gpioWrite(3, 1); - std.time.sleep(1000); - level = jetgpio.gpioRead(7); - std.debug.print("level: {}\n", .{level}); - std.time.sleep(1000000000); - ret = jetgpio.gpioWrite(3, 0); - std.time.sleep(1000); - level = jetgpio.gpioRead(7); - std.debug.print("level: {}\n", .{level}); - std.time.sleep(1000000000); - i += 1; - } - jetgpio.gpioTerminate(); -} diff --git a/github_bad/EXAMPLES_Zig/jetgpio_output.zig b/github_bad/EXAMPLES_Zig/jetgpio_output.zig deleted file mode 100644 index b79efa9..0000000 --- a/github_bad/EXAMPLES_Zig/jetgpio_output.zig +++ /dev/null @@ -1,52 +0,0 @@ -// Usage example of the JETGPIO library -// Compile with: zig build-exe jetgpio_output.zig -ljetgpio -lc -// Execute with: sudo ./jetgpio_output - -const std = @import("std"); -const jetgpio = @cImport({ - @cInclude("jetgpio.h"); -}); -const c = @cImport({ - @cInclude("signal.h"); -}); - -// Global variable to interrupt the loop later on -var interrupt: bool = true; - -// Ctrl-c signal function handler -fn inthandler(_: c_int) callconv(.C) void { - std.time.sleep(1000000); - std.debug.print("\nCaught Ctrl-c, coming out ...\n", .{}); - interrupt = false; -} - -pub fn main() !void { - - // Capture Ctrl-c - _ = c.signal(c.SIGINT, &inthandler); - - const init = jetgpio.gpioInitialise(); - - if (init < 0) { - std.debug.print("Error initiating jetgpio\n", .{}); - } - - // Setting up pin 38 as output - const set1 = jetgpio.gpioSetMode(38, jetgpio.JET_OUTPUT); - if (set1 < 0) { - std.debug.print("Error setting pin 38\n", .{}); - } - - var ret: i32 = 0; - - while (interrupt) { - ret = jetgpio.gpioWrite(38, 1); - ret = jetgpio.gpioWrite(38, 0); - } - - // Pin 38 at 0 - ret = jetgpio.gpioWrite(38, 0); - - // Terminating library - jetgpio.gpioTerminate(); -} diff --git a/github_bad/EXAMPLES_Zig/jetgpio_round_trip.zig b/github_bad/EXAMPLES_Zig/jetgpio_round_trip.zig deleted file mode 100644 index 72830e2..0000000 --- a/github_bad/EXAMPLES_Zig/jetgpio_round_trip.zig +++ /dev/null @@ -1,47 +0,0 @@ -// Usage example of the JETGPIO library -// Compile with: zig build-exe jetgpio_round_trip.zig -ljetgpio -lc -// Execute with: sudo ./jetgpio_round_trip - -const std = @import("std"); -const jetgpio = @cImport({ - @cInclude("jetgpio.h"); -}); - -pub fn main() !void { - const init = jetgpio.gpioInitialise(); - - if (init < 0) { - std.debug.print("Error initiating jetgpio\n", .{}); - } - // Setting up pin 38 as output - const set1 = jetgpio.gpioSetMode(38, jetgpio.JET_OUTPUT); - if (set1 < 0) { - std.debug.print("Error setting pin 38\n", .{}); - } - - // Setting up pin 40 as input - const set2 = jetgpio.gpioSetMode(40, jetgpio.JET_INPUT); - if (set2 < 0) { - std.debug.print("Error setting pin 40\n", .{}); - } - - // Measuring time now - const start = try std.time.Instant.now(); - - // Writing 1 to pin 38 - _ = jetgpio.gpioWrite(38, 1); - - while (jetgpio.gpioRead(40) == 0) {} - - // Measuring time after the loop - const end = try std.time.Instant.now(); - - // Calculating time difference for round trip e.g. time invested in activating the output + the time it takes for the input to detect the level change - const elapsed = end.since(start); - std.debug.print("Elapsed time = {} nanoseconds\n", .{elapsed}); - - // Writing 0 to pin 38 - _ = jetgpio.gpioWrite(38, 1); - - jetgpio.gpioTerminate(); -} diff --git a/github_bad/EXAMPLES_Zig/lcd_i2c.zig b/github_bad/EXAMPLES_Zig/lcd_i2c.zig deleted file mode 100644 index adfd189..0000000 --- a/github_bad/EXAMPLES_Zig/lcd_i2c.zig +++ /dev/null @@ -1,93 +0,0 @@ -// Usage example of the JETGPIO library -// Compile with: zig build-exe lcd_i2c.zig -ljetgpio -lc -// Execute with: sudo ./lcd_i2c - -const std = @import("std"); -const jetgpio = @cImport({ - @cInclude("jetgpio.h"); -}); - -fn send_command(handle: u32, i2cAddr: u32, command: u32) void { - var buffer: u32 = command & 0xF0; - buffer |= 0x04; - var buffer2: u32 = buffer; - buffer |= 0x08; - _ = jetgpio.i2cWriteByteData(handle, i2cAddr, buffer, 0x0); - std.time.sleep(2000000); - buffer2 &= 0xFB; - buffer2 |= 0x08; - _ = jetgpio.i2cWriteByteData(handle, i2cAddr, buffer2, 0x0); - buffer = (command & 0x0F) << 4; - buffer |= 0x04; - buffer2 = buffer; - buffer |= 0x08; - _ = jetgpio.i2cWriteByteData(handle, i2cAddr, buffer, 0x0); - std.time.sleep(2000000); - buffer2 &= 0xFB; - buffer2 |= 0x08; - _ = jetgpio.i2cWriteByteData(handle, i2cAddr, buffer2, 0x0); -} - -fn send_data(handle: u32, i2cAddr: u32, data: u32) void { - var buffer: u32 = data & 0xF0; - buffer |= 0x05; - var buffer2: u32 = buffer; - buffer |= 0x08; - buffer2 &= 0xFB; - buffer2 |= 0x08; - _ = jetgpio.i2cWriteByteData(handle, i2cAddr, buffer, buffer2); - buffer = (data & 0x0F) << 4; - buffer |= 0x05; - buffer2 = buffer; - buffer |= 0x08; - buffer2 &= 0xFB; - buffer2 |= 0x08; - _ = jetgpio.i2cWriteByteData(handle, i2cAddr, buffer, buffer2); -} - -pub fn main() !void { - const LCD_SLAVE_ADDRESS: u32 = 0x3f; - std.debug.print("This will print something on a Freenove i2c 1602 LCD connected to pins 3,5 and it will stay until LCD reset\n", .{}); - - const init = jetgpio.gpioInitialise(); - if (init < 0) { - std.debug.print("Error initiating jetgpio, erro number: {}\n", .{init}); - } - - const lcd: i32 = jetgpio.i2cOpen(1, 0); - if (lcd < 0) { - std.debug.print("Error opening i2c port, error number: {}\n", .{lcd}); - } - - // Now setting stuff up, device has not register map, all characters are sent as is, not to a specific register address - // the trick here is to send the same stuff twice for commands and for characters just once and then a 0, which does nothing - send_command(@intCast(lcd), LCD_SLAVE_ADDRESS, 0x33); - std.time.sleep(5000000); - send_command(@intCast(lcd), LCD_SLAVE_ADDRESS, 0x32); - std.time.sleep(5000000); - send_command(@intCast(lcd), LCD_SLAVE_ADDRESS, 0x28); - std.time.sleep(5000000); - send_command(@intCast(lcd), LCD_SLAVE_ADDRESS, 0x0C); - std.time.sleep(5000000); - send_command(@intCast(lcd), LCD_SLAVE_ADDRESS, 0x01); - std.time.sleep(5000000); - _ = jetgpio.i2cWriteByteData(@intCast(lcd), LCD_SLAVE_ADDRESS, 0x08, 0x0); - - //Now can start writing to the lcd screen, starting at position 0,0 first line ot the left - - const message = "Jetgpio"; - const message2 = " by Rubberazer"; - - send_command(@intCast(lcd), LCD_SLAVE_ADDRESS, 0x80); //Positioning cursor at point 0,0 - for (message) |i| { - send_data(@intCast(lcd), LCD_SLAVE_ADDRESS, i); - } - - send_command(@intCast(lcd), LCD_SLAVE_ADDRESS, 0xC0); //Positioning cursor at second line - for (message2) |i| { - send_data(@intCast(lcd), LCD_SLAVE_ADDRESS, i); - } - // Closing i2c connection - _ = jetgpio.i2cClose(@intCast(lcd)); - jetgpio.gpioTerminate(); -} diff --git a/github_bad/EXAMPLES_Zig/spi_loop.zig b/github_bad/EXAMPLES_Zig/spi_loop.zig deleted file mode 100644 index 8d465eb..0000000 --- a/github_bad/EXAMPLES_Zig/spi_loop.zig +++ /dev/null @@ -1,69 +0,0 @@ -// Usage example of the JETGPIO library -// Compile with: zig build-exe spi_loop.zig -ljetgpio -lc -// Execute with: sudo ./spi_loop - -const std = @import("std"); -const jetgpio = @cImport({ - @cInclude("jetgpio.h"); -}); - -pub fn main() !void { - const txc = [_]u8{ 0xff, 0xaa, 0xbb, 0xcc, 0xdd, 0xff, 0x11 }; - const tx = &txc; - var rxc = [_]u8{ 0, 0, 0, 0, 0, 0, 0 }; - var rx = &rxc; - const init = jetgpio.gpioInitialise(); - if (init < 0) { - std.debug.print("Error initiating jetgpio\n", .{}); - } - - //Port SPI2 pins: 37, 22, 13 & 18 - //to perform a simple loop test, pins 22: SPI2_MISO & 37:SPI2_MOSI should be connected - //with a short jumper cable, when the cable is disconnected the output on screen will show - //all the rx values as zeros - //spiOpen() parameters go as follows: spiOpen(port number, speed in Hz, mode, cs pin delay in us, - //bits per word, least significant bit first, cs change) - - const spiInit = jetgpio.spiOpen(1, 5000000, 0, 0, 8, 1, 1); - if (spiInit < 0) { - std.debug.print("Port SPI2 opening failed. Error code: {}\n", .{spiInit}); - } else { - std.debug.print("Port SPI2 opened OK. Return code: {}\n", .{spiInit}); - } - - //Transfer data - var i: i8 = 0; - while (i < 20) { - // Here some weird casting, expected something more straightforward but...oh well, very strict type control and all that - // also, this is interacting with a C abi after all! more than good enough - const set2 = jetgpio.spiXfer(@intCast(spiInit), @constCast(tx.ptr), rx.ptr, 7); - if (set2 < 0) { - std.debug.print("Spi transfer failed. Error code: {}\n", .{set2}); - } else { - std.debug.print("Spi transfer OK. Return code: {}\n", .{set2}); - } - - std.debug.print("tx0:{x} --> rx0:{x}\n", .{ tx[0], rx[0] }); - std.debug.print("tx1:{x} --> rx1:{x}\n", .{ tx[1], rx[1] }); - std.debug.print("tx2:{x} --> rx2:{x}\n", .{ tx[2], rx[2] }); - std.debug.print("tx3:{x} --> rx3:{x}\n", .{ tx[3], rx[3] }); - std.debug.print("tx4:{x} --> rx4:{x}\n", .{ tx[4], rx[4] }); - std.debug.print("tx5:{x} --> rx5:{x}\n", .{ tx[5], rx[5] }); - std.debug.print("tx6:{x} --> rx6:{x}\n", .{ tx[6], rx[6] }); - - rx[0] = 0; - rx[1] = 0; - rx[2] = 0; - rx[3] = 0; - rx[4] = 0; - rx[5] = 0; - rx[6] = 0; - - i += 1; - std.time.sleep(1000000000); - } - - // Closing spi port - _ = jetgpio.spiClose(@intCast(spiInit)); - jetgpio.gpioTerminate(); -} diff --git a/github_bad/README.md b/github_bad/README.md deleted file mode 100644 index a4c8951..0000000 --- a/github_bad/README.md +++ /dev/null @@ -1,129 +0,0 @@ -# JETGPIO library - -C library to manage the GPIO header of the Nvidia JETSON boards - -[UPDATE: ORIN AGX NOW SUPPORTED](https://github.com/Rubberazer/JETGPIO/discussions/30) - - -

FUNCTIONALITY:

- -- Supported models: - - - JETSON NANO and TX1 - - - JETSON ORIN NANO and ORIN NX - - - JETSON ORIN AGX - -- GPIO control of all the header pinout as input or output. Low latency, see also [The need for speed](#the-need-for-speed) below for some more information on this - -- Catching rising or falling edges in any header pin working as input. Timestamp of the event in nanoseconds in epoch format is provided - -- PWM (hardware) control on header pins 32, 33 on Nano and also 15 on Orin Nano/NX, for Orin AGX the pins are: 13, 15 & 18 - -- I2C serial communication over pins: 27 (SDA) & 28 (SCL) and 3 (SDA) & 5 (SCL) - -- SPI serial communication over pins: 19 (MOSI), 21 (MISO), 23 (SCK) & 24 (CS0) and 37 (MOSI), 22 (MISO), 13 (SCK) & 18 (CS0) - -- No need of previous kernel configuration, no need to change the device tree, no need to reconfigure via /opt/nvidia/jetson-io/jetson-io.py or the like - -

INSTALLATION:

- -Clone/download the content into any folder in your JETSON, cd to that folder and type: - - sudo make - sudo make install - -That's it, the library should be installed and ready to be used. To uninstall the library: - - sudo make uninstall - -

HOW TO:

- -You will find code examples to learn how to use the library in both: EXAMPLES_C & EXAMPLES_C++ folders, the first one contains all the C examples, the second one contains the same examples ready to compile in C++. To compile the examples you will find instructions in the comment section at the top of each of the example files. I have also added a folder with examples in the Zig programming language to test interoperability. - -- [jetgpio_example.c](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C/jetgpio_example.c) & [jetgpio_example.cpp](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C++/jetgpio_example.cpp) show how to setup and use any of the pins as Inputs/Outputs, this will allow you to toggle pins from 0V (logic 0) to 3.3V (logic 1) or read the pin as an input where 3.3V at the pin is a logic 1. Note that when reading inputs, floating pins will throw unreliable results (as there is no actual input) - -- [jetgpio_edge.c](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C/jetgpio_edge.c) & [jetgpio_edge.cpp](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C++/jetgpio_edge.cpp) show how to catch rising or falling edges in any pin working as Input, timestamp in epoch format in nanoseconds is provided - -- [jetgpio_PWM_example.c](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C/jetgpio_PWM_example.c) & [jetgpio_PWM_example.cpp](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C++/jetgpio_PWM_example.cpp) show how to use the PWM funcionality at pin 32 - -- [test_PWM.c](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C/test_PWM.c) & [test_PWM.cpp](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C++/test_PWM.cpp) show again how to use the PWM funcionality with some LEDs connected and also capturing interruptions - -- [jetgpio_i2c_example.c](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C/jetgpio_i2c_example.c) & [jetgpio_i2c_example.cpp](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C++/jetgpio_i2c_example.cpp) show how to use the i2c comms to talk to a MPU6050 gyroscope connected to i2c0 (pins 27 & 28) - -- [lcd_i2c.c](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C/lcd_i2c.c) & [lcd_i2c.cpp](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C++/lcd_i2c.cpp) minimalistic example of how to show a message on the screen of a Freenove i2c 1602 LCD display connected to i2c1 (pins 3 & 5) - -- [spi_loop.c](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C/spi_loop.c) & [spi_loop.cpp](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C++/spi_loop.cpp) show how to run a simple loop test on the SPI port(s) by connecting together pins 19 & 21 for port SPI1 and pins 22 & 37 - for port SPI2 - -- [ZIG Examples](https://github.com/Rubberazer/JETGPIO/tree/main/EXAMPLES_Zig) just for the sake of it - -

DOCUMENTATION:

- -[Some doxygen documentation here](https://rubberazer.github.io/JETGPIO/html/index.html). As a rule of thumb, the library functions names and usage mimic the ones of the pigpio library (which I recommend if you work with Raspberry Pis). Learnt a lot from that one - -

THE NEED FOR SPEED:

- -I created a couple of little programs to measure reaction time e.g. how fast an output pin turns from 0 to 1 (3.3v), or how fast a change to an input pin is detected by the library, a diagram of the physical setup is shown below, basically I set up pin 38 as an output and pin 40 as an input and connect both through a resistor to observe the interaction: - -![jetson_speed](https://user-images.githubusercontent.com/47650457/227725735-0edb04d1-0d8f-465f-9212-18e41e2cc364.png) - -Compiling and running [jetgpio_round_trip.c](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C/jetgpio_round_trip.c) I am measuring the time from before executing the function that writes a logic 1 (3.3v) to pin 38 until the point when this is detected (by voltage level not edge interrupt) at pin 40. Here the intention is to measure the worst case scenario of a combination of 2 different actions: - -- a pin changes state from 0 to 1 (output) -- a second pin detects a change on its state from 0 to 1 (input) being this change produced by the output pin - -The results that I am getting for the round trip (total time to execute both actions) by running this program are: - -| | Nano Classic | Orin Nano | -| :--- | :---: | ---: | -| Minimum | 1.3 us | 3.1 us ** | -| Maximum | 1.8 us | 4.2 us ** | - - -Compiling and running [jetgpio_speed_edge.c](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C/jetgpio_speed_edge.c) I am trying to measure the time using a similar setup as described above, the difference here is that I am using the library function: gpioSetISRFunc() which basically goes through the linux gpio driver in order to catch rising and falling edges, the reason to use the linux driver for this has to do with the fact that catching interrupts from user space (this is a library after all) is basically 'problematic' for a number of reasons, in short, if driver performance and/or device tree stuff got in my way I would basically replace the current driver by my own, but that is beyond the scope of this library. - - -| | Nano Classic | Orin Nano | -| :--- | :---: | ---: | -| Minimum | 250 us | 200 us | -| Maximum | 700 us | 1000 us | - - -Note that this doesn't measure individual actions but the total time to execute both (round trip). It is clear that the timestamp produced by the linux driver is the one to blame for the slow reaction on detecting a change on the input pin, still interesting as there is no meaningful cpu waste as the hardware is producing the interrupt for us (no polling) - -Compiling and running [jetgpio_output.c](https://github.com/Rubberazer/JETGPIO/blob/main/EXAMPLES_C/jetgpio_output.c) I am writing high/low to pin 38 on a continuous loop, what I am getting on the oscilloscope are the following results: - -| | Nano Classic | Orin Nano | -| :--- | :---: | ---: | -| Average | 0.6 us | 2 us ** | - - -**Yes, the new Orin has a slower response/higher latency than the old Jetson Nano, this is due to the fact that writing to some registers is being monitored by an external CPU called BPMP (Boot and Power Management Processor). This CPU is an addition to what is called CPU Complex (the 6 Arm A78A cores that are described on the Orin Nano/NX specs) and is completely independent from the main system, running its own firmware and with an independent device tree. Some of the tasks performed by this CPU are clock and power supply management for peripherals inside the SOM e.g. PWM, GPIO... but it also plays a "firewall" role, in other words before writing to some registers in the standard CPU Complex the writing instructions have to pass through this "firewall" making the whole thing slower. This extra, out of the system security manager can be very useful on some applications but it has obviously a downside. Again sorting this out goes beyond the scope of any user space application (library) and it would imply flashing the Orin after modifying stuff, which is something along with other things like modifying the device tree (and reflashing probably) that I wanted to avoid when I created this library. - - - -![freenove_i2c_1602_lcd](https://github.com/Rubberazer/JETGPIO/assets/47650457/321d70bb-d5f2-4577-b83c-b189f7ed72c9) - - - -

JETSON NANO AND ORIN FAMILY PINOUT:

- -The library uses the typical 40 pin header numbering, taking the dev kit as reference so for instance pin 3 is I2C_2_SDA on Nano, I2C1_SDA on Orin Nano and I2C5_DAT on Orin AGX, pin 1 is 3.3 VDC power and so on. You can check the official NVIDIA pinmux configuration for reference or if not available you can use the ones below: - -https://jetsonhacks.com/nvidia-jetson-nano-j41-header-pinout/ - -https://jetsonhacks.com/nvidia-jetson-orin-nano-gpio-header-pinout/ - -https://jetsonhacks.com/nvidia-jetson-agx-orin-gpio-header-pinout/ - -The library has been tested on a Jetson Nano: tegra210 (TX1), on a Jetson Orin Nano and also on an Orin AGX. - - - - - - - - diff --git a/github_bad/UNLICENSE b/github_bad/UNLICENSE deleted file mode 100644 index 68a49da..0000000 --- a/github_bad/UNLICENSE +++ /dev/null @@ -1,24 +0,0 @@ -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to diff --git a/github_bad/docs/DoxygenLayout.xml b/github_bad/docs/DoxygenLayout.xml deleted file mode 100644 index 04dd436..0000000 --- a/github_bad/docs/DoxygenLayout.xml +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/github_bad/docs/html/bc_s.png b/github_bad/docs/html/bc_s.png deleted file mode 100644 index b0eb44e..0000000 Binary files a/github_bad/docs/html/bc_s.png and /dev/null differ diff --git a/github_bad/docs/html/bdwn.png b/github_bad/docs/html/bdwn.png deleted file mode 100644 index c955406..0000000 Binary files a/github_bad/docs/html/bdwn.png and /dev/null differ diff --git a/github_bad/docs/html/closed.png b/github_bad/docs/html/closed.png deleted file mode 100644 index f1f4d3f..0000000 Binary files a/github_bad/docs/html/closed.png and /dev/null differ diff --git a/github_bad/docs/html/doc.png b/github_bad/docs/html/doc.png deleted file mode 100644 index 529db14..0000000 Binary files a/github_bad/docs/html/doc.png and /dev/null differ diff --git a/github_bad/docs/html/doxygen.css b/github_bad/docs/html/doxygen.css deleted file mode 100644 index b55a868..0000000 --- a/github_bad/docs/html/doxygen.css +++ /dev/null @@ -1,1793 +0,0 @@ -/* The standard CSS for doxygen 1.9.1 */ - -body, table, div, p, dl { - font: 400 14px/22px Roboto,sans-serif; -} - -p.reference, p.definition { - font: 400 14px/22px Roboto,sans-serif; -} - -/* @group Heading Levels */ - -h1.groupheader { - font-size: 150%; -} - -.title { - font: 400 14px/28px Roboto,sans-serif; - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2.groupheader { - border-bottom: 1px solid #376D7F; - color: #0B1519; - font-size: 150%; - font-weight: normal; - margin-top: 1.75em; - padding-top: 8px; - padding-bottom: 4px; - width: 100%; -} - -h3.groupheader { - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - -webkit-transition: text-shadow 0.5s linear; - -moz-transition: text-shadow 0.5s linear; - -ms-transition: text-shadow 0.5s linear; - -o-transition: text-shadow 0.5s linear; - transition: text-shadow 0.5s linear; - margin-right: 15px; -} - -h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; -} - -dt { - font-weight: bold; -} - -ul.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; - column-count: 3; -} - -p.startli, p.startdd { - margin-top: 2px; -} - -th p.starttd, th p.intertd, th p.endtd { - font-size: 100%; - font-weight: 700; -} - -p.starttd { - margin-top: 0px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -p.interli { -} - -p.interdd { -} - -p.intertd { -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.navtab { - border-right: 1px solid #4991A9; - padding-right: 15px; - text-align: right; - line-height: 110%; -} - -div.navtab table { - border-spacing: 0; -} - -td.navtab { - padding-right: 6px; - padding-left: 6px; -} -td.navtabHL { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - padding-right: 6px; - padding-left: 6px; -} - -td.navtabHL a, td.navtabHL a:visited { - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} - -a.navtab { - font-weight: bold; -} - -div.qindex{ - text-align: center; - width: 100%; - line-height: 140%; - font-size: 130%; - color: #A0A0A0; -} - -dt.alphachar{ - font-size: 180%; - font-weight: bold; -} - -.alphachar a{ - color: black; -} - -.alphachar a:hover, .alphachar a:visited{ - text-decoration: none; -} - -.classindex dl { - padding: 25px; - column-count:1 -} - -.classindex dd { - display:inline-block; - margin-left: 50px; - width: 90%; - line-height: 1.15em; -} - -.classindex dl.odd { - background-color: #EEF5F7; -} - -@media(min-width: 1120px) { - .classindex dl { - column-count:2 - } -} - -@media(min-width: 1320px) { - .classindex dl { - column-count:3 - } -} - - -/* @group Link Styling */ - -a { - color: #0F1E22; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #152B32; -} - -a:hover { - text-decoration: underline; -} - -.contents a.qindexHL:visited { - color: #FFFFFF; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code, a.code:visited, a.line, a.line:visited { - color: #152B32; -} - -a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #152B32; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -ul { - overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ -} - -#side-nav ul { - overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ -} - -#main-nav ul { - overflow: visible; /* reset ul rule for the navigation bar drop down lists */ -} - -.fragment { - text-align: left; - direction: ltr; - overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ - overflow-y: hidden; -} - -pre.fragment { - border: 1px solid #7FB5C7; - background-color: #F6FAFB; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: monospace, fixed; - font-size: 105%; -} - -div.fragment { - padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ - margin: 4px 8px 4px 2px; - background-color: #F6FAFB; - border: 1px solid #7FB5C7; -} - -div.line { - font-family: monospace, fixed; - font-size: 13px; - min-height: 13px; - line-height: 1.0; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - text-indent: -53px; - padding-left: 53px; - padding-bottom: 0px; - margin: 0px; - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -div.line:after { - content:"\000A"; - white-space: pre; -} - -div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; -} - - -span.lineno { - padding-right: 4px; - text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; - white-space: pre; -} -span.lineno a { - background-color: #D8D8D8; -} - -span.lineno a:hover { - background-color: #C8C8C8; -} - -.lineno { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -div.ah, span.ah { - background-color: black; - font-weight: bold; - color: #FFFFFF; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); -} - -div.classindex ul { - list-style: none; - padding-left: 0; -} - -div.classindex span.ai { - display: inline-block; -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 12px; - margin-right: 8px; -} - -td.indexkey { - background-color: #D1E4EB; - font-weight: bold; - border: 1px solid #7FB5C7; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #D1E4EB; - border: 1px solid #7FB5C7; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #D6E7ED; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl, img.inline { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -blockquote { - background-color: #EBF3F6; - border-left: 2px solid #44879D; - margin: 0 24px 0 4px; - padding: 0 12px 0 16px; -} - -blockquote.DocNodeRTL { - border-left: 0; - border-right: 2px solid #44879D; - margin: 0 4px 0 24px; - padding: 0 16px 0 12px; -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #4991A9; -} - -th.dirtab { - background: #D1E4EB; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #183038; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.memberdecls td, .fieldtable tr { - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -.memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F1F7F8; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memSeparator { - border-bottom: 1px solid #B2D3DD; - line-height: 1px; - margin: 0px; - padding: 0px; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight, .memTemplItemRight { - width: 100%; -} - -.memTemplParams { - color: #152B32; - white-space: nowrap; - font-size: 80%; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtitle { - padding: 8px; - border-top: 1px solid #4D97B0; - border-left: 1px solid #4D97B0; - border-right: 1px solid #4D97B0; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - margin-bottom: -1px; - background-image: url('nav_f.png'); - background-repeat: repeat-x; - background-color: #BCD8E2; - line-height: 1.25; - font-weight: 300; - float:left; -} - -.permalink -{ - font-size: 65%; - display: inline-block; - vertical-align: middle; -} - -.memtemplate { - font-size: 80%; - color: #152B32; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #D1E4EB; - border: 1px solid #4991A9; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; - -webkit-transition: box-shadow 0.5s linear; - -moz-transition: box-shadow 0.5s linear; - -ms-transition: box-shadow 0.5s linear; - -o-transition: box-shadow 0.5s linear; - transition: box-shadow 0.5s linear; - display: table !important; - width: 100%; -} - -.memitem.glow { - box-shadow: 0 0 15px cyan; -} - -.memname { - font-weight: 400; - margin-left: 6px; -} - -.memname td { - vertical-align: bottom; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #4D97B0; - border-left: 1px solid #4D97B0; - border-right: 1px solid #4D97B0; - padding: 6px 0px 6px 0px; - color: #04080A; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-color: #B5D4DE; - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - -} - -.overload { - font-family: "courier new",courier,monospace; - font-size: 65%; -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #4D97B0; - border-left: 1px solid #4D97B0; - border-right: 1px solid #4D97B0; - padding: 6px 10px 2px 10px; - background-color: #F6FAFB; - border-top-width: 0; - background-image:url('nav_g.png'); - background-repeat:repeat-x; - background-color: #FFFFFF; - /* opera specific markup */ - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-bottomright: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} -.paramname code { - line-height: 14px; -} - -.params, .retval, .exception, .tparams { - margin-left: 0px; - padding-left: 0px; -} - -.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype, .tparams .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir, .tparams .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - -table.mlabels { - border-spacing: 0px; -} - -td.mlabels-left { - width: 100%; - padding: 0px; -} - -td.mlabels-right { - vertical-align: bottom; - padding: 0px; - white-space: nowrap; -} - -span.mlabels { - margin-left: 8px; -} - -span.mlabel { - background-color: #2C5664; - border-top:1px solid #1D3A44; - border-left:1px solid #1D3A44; - border-right:1px solid #7FB5C7; - border-bottom:1px solid #7FB5C7; - text-shadow: none; - color: white; - margin-right: 4px; - padding: 2px 3px; - border-radius: 3px; - font-size: 7pt; - white-space: nowrap; - vertical-align: middle; -} - - - -/* @end */ - -/* these are for tree view inside a (index) page */ - -div.directory { - margin: 10px 0px; - border-top: 1px solid #44879D; - border-bottom: 1px solid #44879D; - width: 100%; -} - -.directory table { - border-collapse:collapse; -} - -.directory td { - margin: 0px; - padding: 0px; - vertical-align: top; -} - -.directory td.entry { - white-space: nowrap; - padding-right: 6px; - padding-top: 3px; -} - -.directory td.entry a { - outline:none; -} - -.directory td.entry a img { - border: none; -} - -.directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); -} - -.directory tr.even { - padding-left: 6px; - background-color: #EBF3F6; -} - -.directory img { - vertical-align: -30%; -} - -.directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; -} - -.directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #0F1E22; -} - -.arrow { - color: #44879D; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: pointer; - font-size: 80%; - display: inline-block; - width: 16px; - height: 22px; -} - -.icon { - font-family: Arial, Helvetica; - font-weight: bold; - font-size: 12px; - height: 14px; - width: 16px; - display: inline-block; - background-color: #2C5664; - color: white; - text-align: center; - border-radius: 4px; - margin-left: 2px; - margin-right: 2px; -} - -.icona { - width: 24px; - height: 22px; - display: inline-block; -} - -.iconfopen { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.iconfclosed { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.icondoc { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('doc.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -table.directory { - font: 400 14px Roboto,sans-serif; -} - -/* @end */ - -div.dynheader { - margin-top: 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -address { - font-style: normal; - color: #060C0E; -} - -table.doxtable caption { - caption-side: top; -} - -table.doxtable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #070E10; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #0C171B; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -table.fieldtable { - /*width: 100%;*/ - margin-bottom: 10px; - border: 1px solid #4D97B0; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #4D97B0; - border-bottom: 1px solid #4D97B0; - vertical-align: top; -} - -.fieldtable td.fieldname { - padding-top: 3px; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #4D97B0; - /*width: 100%;*/ -} - -.fieldtable td.fielddoc p:first-child { - margin-top: 0px; -} - -.fieldtable td.fielddoc p:last-child { - margin-bottom: 2px; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #BCD8E2; - font-size: 90%; - color: #04080A; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - font-weight: 400; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #4D97B0; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - background-position: 0 -5px; - height:30px; - line-height:30px; - color:#397083; - border:solid 1px #7AB2C5; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#0B1619; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; - color: #050A0C; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; -} - -.navpath li.navelem a:hover -{ - color:#274C59; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#0B1619; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -table.classindex -{ - margin: 10px; - white-space: nowrap; - margin-left: 3%; - margin-right: 3%; - width: 94%; - border: 0; - border-spacing: 0; - padding: 0; -} - -div.ingroups -{ - font-size: 8pt; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F1F7F8; - margin: 0px; - border-bottom: 1px solid #7FB5C7; -} - -div.headertitle -{ - padding: 5px 5px 5px 10px; -} - -.PageDocRTL-title div.headertitle { - text-align: right; - direction: rtl; -} - -dl { - padding: 0 0 0 0; -} - -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ -dl.section { - margin-left: 0px; - padding-left: 0px; -} - -dl.section.DocNodeRTL { - margin-right: 0px; - padding-right: 0px; -} - -dl.note { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #D0C000; -} - -dl.note.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #D0C000; -} - -dl.warning, dl.attention { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #FF0000; -} - -dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #00D000; -} - -dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00D000; -} - -dl.deprecated { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #505050; -} - -dl.deprecated.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #505050; -} - -dl.todo { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #00C0E0; -} - -dl.todo.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00C0E0; -} - -dl.test { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #3030E0; -} - -dl.test.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #3030E0; -} - -dl.bug { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #C08050; -} - -dl.bug.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #C08050; -} - -dl.section dd { - margin-bottom: 6px; -} - - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectalign -{ - vertical-align: middle; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #1D3A44; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.plantumlgraph -{ - text-align: center; -} - -.diagraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #3D788B; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#091316; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; - text-align:right; - width:52px; -} - -dl.citelist dd { - margin:2px 0 2px 72px; - padding:5px 0; -} - -div.toc { - padding: 14px 25px; - background-color: #E6F0F4; - border: 1px solid #A6CBD8; - border-radius: 7px 7px 7px 7px; - float: right; - height: auto; - margin: 0 8px 10px 10px; - width: 200px; -} - -.PageDocRTL-title div.toc { - float: left !important; - text-align: right; -} - -div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; - margin-top: 5px; - padding-left: 10px; - padding-top: 2px; -} - -.PageDocRTL-title div.toc li { - background-position-x: right !important; - padding-left: 0 !important; - padding-right: 10px; -} - -div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #152B32; - border-bottom: 0 none; - margin: 0; -} - -div.toc ul { - list-style: none outside none; - border: medium none; - padding: 0px; -} - -div.toc li.level1 { - margin-left: 0px; -} - -div.toc li.level2 { - margin-left: 15px; -} - -div.toc li.level3 { - margin-left: 30px; -} - -div.toc li.level4 { - margin-left: 45px; -} - -span.emoji { - /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html - * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; - */ -} - -.PageDocRTL-title div.toc li.level1 { - margin-left: 0 !important; - margin-right: 0; -} - -.PageDocRTL-title div.toc li.level2 { - margin-left: 0 !important; - margin-right: 15px; -} - -.PageDocRTL-title div.toc li.level3 { - margin-left: 0 !important; - margin-right: 30px; -} - -.PageDocRTL-title div.toc li.level4 { - margin-left: 0 !important; - margin-right: 45px; -} - -.inherit_header { - font-weight: bold; - color: gray; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.inherit_header td { - padding: 6px 0px 2px 5px; -} - -.inherit { - display: none; -} - -tr.heading h2 { - margin-top: 12px; - margin-bottom: 4px; -} - -/* tooltip related style info */ - -.ttc { - position: absolute; - display: none; -} - -#powerTip { - cursor: default; - white-space: nowrap; - background-color: white; - border: 1px solid gray; - border-radius: 4px 4px 4px 4px; - box-shadow: 1px 1px 7px gray; - display: none; - font-size: smaller; - max-width: 80%; - opacity: 0.9; - padding: 1ex 1em 1em; - position: absolute; - z-index: 2147483647; -} - -#powerTip div.ttdoc { - color: grey; - font-style: italic; -} - -#powerTip div.ttname a { - font-weight: bold; -} - -#powerTip div.ttname { - font-weight: bold; -} - -#powerTip div.ttdeci { - color: #006318; -} - -#powerTip div { - margin: 0px; - padding: 0px; - font: 12px/16px Roboto,sans-serif; -} - -#powerTip:before, #powerTip:after { - content: ""; - position: absolute; - margin: 0px; -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.s:after, #powerTip.s:before, -#powerTip.w:after, #powerTip.w:before, -#powerTip.e:after, #powerTip.e:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.nw:after, #powerTip.nw:before, -#powerTip.sw:after, #powerTip.sw:before { - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; -} - -#powerTip.n:after, #powerTip.s:after, -#powerTip.w:after, #powerTip.e:after, -#powerTip.nw:after, #powerTip.ne:after, -#powerTip.sw:after, #powerTip.se:after { - border-color: rgba(255, 255, 255, 0); -} - -#powerTip.n:before, #powerTip.s:before, -#powerTip.w:before, #powerTip.e:before, -#powerTip.nw:before, #powerTip.ne:before, -#powerTip.sw:before, #powerTip.se:before { - border-color: rgba(128, 128, 128, 0); -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.nw:after, #powerTip.nw:before { - top: 100%; -} - -#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #FFFFFF; - border-width: 10px; - margin: 0px -10px; -} -#powerTip.n:before { - border-top-color: #808080; - border-width: 11px; - margin: 0px -11px; -} -#powerTip.n:after, #powerTip.n:before { - left: 50%; -} - -#powerTip.nw:after, #powerTip.nw:before { - right: 14px; -} - -#powerTip.ne:after, #powerTip.ne:before { - left: 14px; -} - -#powerTip.s:after, #powerTip.s:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.sw:after, #powerTip.sw:before { - bottom: 100%; -} - -#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #FFFFFF; - border-width: 10px; - margin: 0px -10px; -} - -#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: #808080; - border-width: 11px; - margin: 0px -11px; -} - -#powerTip.s:after, #powerTip.s:before { - left: 50%; -} - -#powerTip.sw:after, #powerTip.sw:before { - right: 14px; -} - -#powerTip.se:after, #powerTip.se:before { - left: 14px; -} - -#powerTip.e:after, #powerTip.e:before { - left: 100%; -} -#powerTip.e:after { - border-left-color: #FFFFFF; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.e:before { - border-left-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -#powerTip.w:after, #powerTip.w:before { - right: 100%; -} -#powerTip.w:after { - border-right-color: #FFFFFF; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.w:before { - border-right-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } -} - -/* @group Markdown */ - -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #070E10; - padding: 3px 7px 2px; -} - -table.markdownTable tr { -} - -th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { - background-color: #0C171B; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft, td.markdownTableBodyLeft { - text-align: left -} - -th.markdownTableHeadRight, td.markdownTableBodyRight { - text-align: right -} - -th.markdownTableHeadCenter, td.markdownTableBodyCenter { - text-align: center -} - -.DocNodeRTL { - text-align: right; - direction: rtl; -} - -.DocNodeLTR { - text-align: left; - direction: ltr; -} - -table.DocNodeRTL { - width: auto; - margin-right: 0; - margin-left: auto; -} - -table.DocNodeLTR { - width: auto; - margin-right: auto; - margin-left: 0; -} - -tt, code, kbd, samp -{ - display: inline-block; - direction:ltr; -} -/* @end */ - -u { - text-decoration: underline; -} - diff --git a/github_bad/docs/html/doxygen.svg b/github_bad/docs/html/doxygen.svg deleted file mode 100644 index 59d1195..0000000 --- a/github_bad/docs/html/doxygen.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/github_bad/docs/html/dynsections.js b/github_bad/docs/html/dynsections.js deleted file mode 100644 index 3174bd7..0000000 --- a/github_bad/docs/html/dynsections.js +++ /dev/null @@ -1,121 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file - */ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - - - -Jetgpio: File List - - - - - - - - - - - - - -
-
- - - - - - -
-
Jetgpio -  1.2 -
-
C library to manage the GPIO header of the Nvidia JETSON boards
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
File List
-
-
-
Here is a list of all documented files with brief descriptions:
- - -
 jetgpio.h
-
-
-
- - - - diff --git a/github_bad/docs/html/files_dup.js b/github_bad/docs/html/files_dup.js deleted file mode 100644 index c8b3aed..0000000 --- a/github_bad/docs/html/files_dup.js +++ /dev/null @@ -1,4 +0,0 @@ -var files_dup = -[ - [ "jetgpio.h", "jetgpio_8h.html", "jetgpio_8h" ] -]; \ No newline at end of file diff --git a/github_bad/docs/html/folderclosed.png b/github_bad/docs/html/folderclosed.png deleted file mode 100644 index ef41538..0000000 Binary files a/github_bad/docs/html/folderclosed.png and /dev/null differ diff --git a/github_bad/docs/html/folderopen.png b/github_bad/docs/html/folderopen.png deleted file mode 100644 index ec8d8d8..0000000 Binary files a/github_bad/docs/html/folderopen.png and /dev/null differ diff --git a/github_bad/docs/html/globals.html b/github_bad/docs/html/globals.html deleted file mode 100644 index afc5723..0000000 --- a/github_bad/docs/html/globals.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - -Jetgpio: Globals - - - - - - - - - - - - - -
-
- - - - - - -
-
Jetgpio -  1.2 -
-
C library to manage the GPIO header of the Nvidia JETSON boards
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
-
-
- - - - diff --git a/github_bad/docs/html/globals_func.html b/github_bad/docs/html/globals_func.html deleted file mode 100644 index 1015076..0000000 --- a/github_bad/docs/html/globals_func.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - -Jetgpio: Globals - - - - - - - - - - - - - -
-
- - - - - - -
-
Jetgpio -  1.2 -
-
C library to manage the GPIO header of the Nvidia JETSON boards
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
- - - - diff --git a/github_bad/docs/html/graph_legend.dot b/github_bad/docs/html/graph_legend.dot deleted file mode 100644 index 4d6ac8c..0000000 --- a/github_bad/docs/html/graph_legend.dot +++ /dev/null @@ -1,23 +0,0 @@ -digraph "Graph Legend" -{ - // LATEX_PDF_SIZE - edge [fontname="Helvetica",fontsize="10",labelfontname="Helvetica",labelfontsize="10"]; - node [fontname="Helvetica",fontsize="10",shape=record]; - Node9 [shape="box",label="Inherited",fontsize="10",height=0.2,width=0.4,fontname="Helvetica",fillcolor="grey75",style="filled" fontcolor="black"]; - Node10 -> Node9 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node10 [shape="box",label="PublicBase",fontsize="10",height=0.2,width=0.4,fontname="Helvetica",color="black"]; - Node11 -> Node10 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node11 [shape="box",label="Truncated",fontsize="10",height=0.2,width=0.4,fontname="Helvetica",color="red"]; - Node13 -> Node9 [dir="back",color="darkgreen",fontsize="10",style="solid",fontname="Helvetica"]; - Node13 [shape="box",label="ProtectedBase",fontsize="10",height=0.2,width=0.4,fontname="Helvetica",color="black"]; - Node14 -> Node9 [dir="back",color="firebrick4",fontsize="10",style="solid",fontname="Helvetica"]; - Node14 [shape="box",label="PrivateBase",fontsize="10",height=0.2,width=0.4,fontname="Helvetica",color="black"]; - Node15 -> Node9 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node15 [shape="box",label="Undocumented",fontsize="10",height=0.2,width=0.4,fontname="Helvetica",color="grey75"]; - Node16 -> Node9 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node16 [shape="box",label="Templ< int >",fontsize="10",height=0.2,width=0.4,fontname="Helvetica",color="black"]; - Node17 -> Node16 [dir="back",color="orange",fontsize="10",style="dashed",label="< int >",fontname="Helvetica"]; - Node17 [shape="box",label="Templ< T >",fontsize="10",height=0.2,width=0.4,fontname="Helvetica",color="black"]; - Node18 -> Node9 [dir="back",color="darkorchid3",fontsize="10",style="dashed",label="m_usedClass",fontname="Helvetica"]; - Node18 [shape="box",label="Used",fontsize="10",height=0.2,width=0.4,fontname="Helvetica",color="black"]; -} diff --git a/github_bad/docs/html/graph_legend.html b/github_bad/docs/html/graph_legend.html deleted file mode 100644 index 3792462..0000000 --- a/github_bad/docs/html/graph_legend.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - -Jetgpio: Graph Legend - - - - - - - - - - - - - -
-
- - - - - - -
-
Jetgpio -  1.2 -
-
C library to manage the GPIO header of the Nvidia JETSON boards
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Graph Legend
-
-
-

This page explains how to interpret the graphs that are generated by doxygen.

-

Consider the following example:

/*! Invisible class because of truncation */
-
class Invisible { };
-
-
/*! Truncated class, inheritance relation is hidden */
-
class Truncated : public Invisible { };
-
-
/* Class not documented with doxygen comments */
-
class Undocumented { };
-
-
/*! Class that is inherited using public inheritance */
-
class PublicBase : public Truncated { };
-
-
/*! A template class */
-
template<class T> class Templ { };
-
-
/*! Class that is inherited using protected inheritance */
-
class ProtectedBase { };
-
-
/*! Class that is inherited using private inheritance */
-
class PrivateBase { };
-
-
/*! Class that is used by the Inherited class */
-
class Used { };
-
-
/*! Super class that inherits a number of other classes */
-
class Inherited : public PublicBase,
-
protected ProtectedBase,
-
private PrivateBase,
-
public Undocumented,
-
public Templ<int>
-
{
-
private:
-
Used *m_usedClass;
-
};
-

This will result in the following graph:

-

The boxes in the above graph have the following meaning:

-
    -
  • -A filled gray box represents the struct or class for which the graph is generated.
  • -
  • -A box with a black border denotes a documented struct or class.
  • -
  • -A box with a gray border denotes an undocumented struct or class.
  • -
  • -A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • -
-

The arrows have the following meaning:

-
    -
  • -A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • -
  • -A dark green arrow is used for protected inheritance.
  • -
  • -A dark red arrow is used for private inheritance.
  • -
  • -A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • -
  • -A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • -
-
-
- - - - diff --git a/github_bad/docs/html/index.html b/github_bad/docs/html/index.html deleted file mode 100644 index 356f013..0000000 --- a/github_bad/docs/html/index.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - -Jetgpio: JETGPIO library - - - - - - - - - - - - - -
-
- - - - - - -
-
Jetgpio -  1.2 -
-
C library to manage the GPIO header of the Nvidia JETSON boards
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
JETGPIO library
-
-
-

C library to manage the GPIO header of the Nvidia JETSON boards

-

UPDATE: ORIN AGX NOW SUPPORTED

-

FUNCTIONALITY:

-
    -
  • Supported models:
      -
    • JETSON NANO and TX1
    • -
    • JETSON ORIN NANO and ORIN NX
    • -
    • JETSON ORIN AGX
    • -
    -
  • -
  • GPIO control of all the header pinout as input or output. Low latency, see also The need for speed below for some more information on this
  • -
  • Catching rising or falling edges in any header pin working as input. Timestamp of the event in nanoseconds in epoch format is provided
  • -
  • PWM (hardware) control on header pins 32, 33 on Nano and also 15 on Orin Nano/NX, for Orin AGX the pins are: 13, 15 & 18
  • -
  • I2C serial communication over pins: 27 (SDA) & 28 (SCL) and 3 (SDA) & 5 (SCL)
  • -
  • SPI serial communication over pins: 19 (MOSI), 21 (MISO), 23 (SCK) & 24 (CS0) and 37 (MOSI), 22 (MISO), 13 (SCK) & 18 (CS0)
  • -
  • No need of previous kernel configuration, no need to change the device tree, no need to reconfigure via /opt/nvidia/jetson-io/jetson-io.py or the like
    -
  • -
-

INSTALLATION:

-

Clone/download the content into any folder in your JETSON, cd to that folder and type:

sudo make   
-sudo make install                                             
-

That's it, the library should be installed and ready to be used. To uninstall the library:

sudo make uninstall
-

HOW TO:

-

You will find code examples to learn how to use the library in both: EXAMPLES_C & EXAMPLES_C++ folders, the first one contains all the C examples, the second one contains the same examples ready to compile in C++. To compile the examples you will find instructions in the comment section at the top of each of the example files. I have also added a folder with examples in the Zig programming language to test interoperability.

-
    -
  • jetgpio_example.c & jetgpio_example.cpp show how to setup and use any of the pins as Inputs/Outputs, this will allow you to toggle pins from 0V (logic 0) to 3.3V (logic 1) or read the pin as an input where 3.3V at the pin is a logic 1. Note that when reading inputs, floating pins will throw unreliable results (as there is no actual input)
  • -
  • jetgpio_edge.c & jetgpio_edge.cpp show how to catch rising or falling edges in any pin working as Input, timestamp in epoch format in nanoseconds is provided
  • -
  • jetgpio_PWM_example.c & jetgpio_PWM_example.cpp show how to use the PWM funcionality at pin 32
  • -
  • test_PWM.c & test_PWM.cpp show again how to use the PWM funcionality with some LEDs connected and also capturing interruptions
  • -
  • jetgpio_i2c_example.c & jetgpio_i2c_example.cpp show how to use the i2c comms to talk to a MPU6050 gyroscope connected to i2c0 (pins 27 & 28)
  • -
  • lcd_i2c.c & lcd_i2c.cpp minimalistic example of how to show a message on the screen of a Freenove i2c 1602 LCD display connected to i2c1 (pins 3 & 5)
  • -
  • spi_loop.c & spi_loop.cpp show how to run a simple loop test on the SPI port(s) by connecting together pins 19 & 21 for port SPI1 and pins 22 & 37 for port SPI2
  • -
  • ZIG Examples just for the sake of it
  • -
-

DOCUMENTATION:

-

Some doxygen documentation here. As a rule of thumb, the library functions names and usage mimic the ones of the pigpio library (which I recommend if you work with Raspberry Pis). Learnt a lot from that one

-

THE NEED FOR SPEED:

-

I created a couple of little programs to measure reaction time e.g. how fast an output pin turns from 0 to 1 (3.3v), or how fast a change to an input pin is detected by the library, a diagram of the physical setup is shown below, basically I set up pin 38 as an output and pin 40 as an input and connect both through a resistor to observe the interaction:

-

jetson_speed

-

Compiling and running jetgpio_round_trip.c I am measuring the time from before executing the function that writes a logic 1 (3.3v) to pin 38 until the point when this is detected (by voltage level not edge interrupt) at pin 40. Here the intention is to measure the worst case scenario of a combination of 2 different actions:

-
    -
  • a pin changes state from 0 to 1 (output)
  • -
  • a second pin detects a change on its state from 0 to 1 (input) being this change produced by the output pin
  • -
-

The results that I am getting for the round trip (total time to execute both actions) by running this program are:

- - - - - - - -
Nano Classic Orin Nano
Minimum 1.3 us 3.1 us **
Maximum 1.8 us 4.2 us **
-

Compiling and running jetgpio_speed_edge.c I am trying to measure the time using a similar setup as described above, the difference here is that I am using the library function: gpioSetISRFunc() which basically goes through the linux gpio driver in order to catch rising and falling edges, the reason to use the linux driver for this has to do with the fact that catching interrupts from user space (this is a library after all) is basically 'problematic' for a number of reasons, in short, if driver performance and/or device tree stuff got in my way I would basically replace the current driver by my own, but that is beyond the scope of this library.

- - - - - - - -
Nano Classic Orin Nano
Minimum 250 us 200 us
Maximum 700 us 1000 us
-

Note that this doesn't measure individual actions but the total time to execute both (round trip). It is clear that the timestamp produced by the linux driver is the one to blame for the slow reaction on detecting a change on the input pin, still interesting as there is no meaningful cpu waste as the hardware is producing the interrupt for us (no polling)

-

Compiling and running jetgpio_output.c I am writing high/low to pin 38 on a continuous loop, what I am getting on the oscilloscope are the following results:

- - - - - -
Nano Classic Orin Nano
Average 0.6 us 2 us **
-

**Yes, the new Orin has a slower response/higher latency than the old Jetson Nano, this is due to the fact that writing to some registers is being monitored by an external CPU called BPMP (Boot and Power Management Processor). This CPU is an addition to what is called CPU Complex (the 6 Arm A78A cores that are described on the Orin Nano/NX specs) and is completely independent from the main system, running its own firmware and with an independent device tree. Some of the tasks performed by this CPU are clock and power supply management for peripherals inside the SOM e.g. PWM, GPIO... but it also plays a "firewall" role, in other words before writing to some registers in the standard CPU Complex the writing instructions have to pass through this "firewall" making the whole thing slower. This extra, out of the system security manager can be very useful on some applications but it has obviously a downside. Again sorting this out goes beyond the scope of any user space application (library) and it would imply flashing the Orin after modifying stuff, which is something along with other things like modifying the device tree (and reflashing probably) that I wanted to avoid when I created this library.

-

freenove_i2c_1602_lcd

-

JETSON NANO AND ORIN FAMILY PINOUT:

-

The library uses the typical 40 pin header numbering, taking the dev kit as reference so for instance pin 3 is I2C_2_SDA on Nano, I2C1_SDA on Orin Nano and I2C5_DAT on Orin AGX, pin 1 is 3.3 VDC power and so on. You can check the official NVIDIA pinmux configuration for reference or if not available you can use the ones below:

-

https://jetsonhacks.com/nvidia-jetson-nano-j41-header-pinout/

-

https://jetsonhacks.com/nvidia-jetson-orin-nano-gpio-header-pinout/

-

https://jetsonhacks.com/nvidia-jetson-agx-orin-gpio-header-pinout/

-

The library has been tested on a Jetson Nano: tegra210 (TX1), on a Jetson Orin Nano and also on an Orin AGX.

-
-
-
- - - - diff --git a/github_bad/docs/html/jetgpio_8h.html b/github_bad/docs/html/jetgpio_8h.html deleted file mode 100644 index 8769dc4..0000000 --- a/github_bad/docs/html/jetgpio_8h.html +++ /dev/null @@ -1,929 +0,0 @@ - - - - - - - -Jetgpio: jetgpio.h File Reference - - - - - - - - - - - - - -
-
- - - - - - -
-
Jetgpio -  1.2 -
-
C library to manage the GPIO header of the Nvidia JETSON boards
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
jetgpio.h File Reference
-
-
-
#include <stddef.h>
-#include <stdint.h>
-
-Include dependency graph for jetgpio.h:
-
-
-
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

int gpioInitialise (void)
 Initialises the library. gpioInitialise must be called before using the other library functions, it stores the status of all the relevant registers before using/modifying them. More...
 
void gpioTerminate (void)
 Terminates the library. This function restores the used registers to their previous state and releases memory. More...
 
int gpioSetMode (unsigned gpio, unsigned mode)
 Sets the GPIO mode, typically input or output. More...
 
int gpioRead (unsigned gpio)
 Reads the GPIO level, on or off, 0 or 1. Arduino style: digitalRead. Wheter a pin has been set as input or output it can be read with this function. More...
 
int gpioWrite (unsigned gpio, unsigned level)
 Sets the GPIO level, on or off. Arduino style: digitalWrite. More...
 
int gpioSetISRFunc (unsigned gpio, unsigned edge, unsigned debounce, unsigned long *timestamp, void(*f)())
 Registers a function to be called (a callback) whenever the specified. More...
 
int gpioSetPWMfrequency (unsigned gpio, unsigned frequency)
 Sets the frequency in hertz to be used for the GPIO. More...
 
int gpioPWM (unsigned gpio, unsigned dutycycle)
 Starts PWM on the GPIO, dutycycle between 0 (off) and range (fully on). Arduino style: analogWrite. More...
 
int i2cOpen (unsigned i2cBus, unsigned i2cFlags)
 This returns a handle for the device at the address on the I2C bus. More...
 
int i2cClose (unsigned handle)
 This closes the I2C device associated with the handle. More...
 
int i2cWriteByteData (unsigned handle, unsigned i2cAddr, unsigned i2cReg, unsigned bVal)
 This writes a single byte to the specified register of the device associated with handle. More...
 
int i2cReadByteData (unsigned handle, unsigned i2cAddr, unsigned i2cReg)
 This reads a single byte from the specified register of the device associated with handle. More...
 
int i2cWriteWordData (unsigned handle, unsigned i2cAddr, unsigned i2cReg, unsigned wVal)
 This writes two bytes to the specified consecutive register(s) of the device associated with handle. More...
 
int i2cReadWordData (unsigned handle, unsigned i2cAddr, unsigned i2cReg)
 This reads two bytes from the specified consecutive register(s) of the device associated with handle. More...
 
int spiOpen (unsigned spiChan, unsigned speed, unsigned mode, unsigned cs_delay, unsigned bits_word, unsigned lsb_first, unsigned cs_change)
 This function returns a handle for the SPI device on the channel. Data will be transferred at baud bits per second. The flags may be used to modify the default behaviour of a 4-wire operation, mode 0, active low chip select. There are 2 SPI channels called SPI1 & SPI2 on Nano and SPI0 & SPI1 on Orin Nano & NX. For Orin AGX there is only 1 SPI channel: SPI1 (pins 21, 19...so forth). The pins used are given in the following table. More...
 
int spiClose (unsigned handle)
 This functions closes the SPI device identified by the handle. More...
 
int spiXfer (unsigned handle, char *txBuf, char *rxBuf, unsigned len)
 This function transfers len bytes of data from txBuf to the SPI device associated with the handle. Simultaneously len bytes of data are read from the device and placed in rxBuf. More...
 
-

Function Documentation

- -

◆ gpioInitialise()

- -
-
- - - - - - - - -
int gpioInitialise (void )
-
- -

Initialises the library. gpioInitialise must be called before using the other library functions, it stores the status of all the relevant registers before using/modifying them.

-
Returns
Returns 0 if OK, otherwise a negative number
-
if (gpioInitialise() < 0)
-
{
-
// jetgpio initialisation failed.
-
}
-
else
-
{
-
// jetgpio initialised okay.
-
}
-
int gpioInitialise(void)
Initialises the library. gpioInitialise must be called before using the other library functions,...
Definition: nano.c:185
-
-
-
- -

◆ gpioPWM()

- -
-
- - - - - - - - - - - - - - - - - - -
int gpioPWM (unsigned gpio,
unsigned dutycycle 
)
-
- -

Starts PWM on the GPIO, dutycycle between 0 (off) and range (fully on). Arduino style: analogWrite.

-
Parameters
- - - -
gpioNano: 32, 33 Orin Nano,NX: 15, 32, 33 Orin AGX: 13, 15, 18
dutycycle0-256 (0 to 100%)
-
-
-
Returns
Returns 0 if OK, a negative number otherwise
-
gpioPWM(32, 256); // Sets pin 32 full on.
-
gpioPWM(33, 128); // Sets pin 33 half on.
-
int gpioPWM(unsigned gpio, unsigned dutycycle)
Starts PWM on the GPIO, dutycycle between 0 (off) and range (fully on). Arduino style: analogWrite.
Definition: nano.c:2048
-
-
-
- -

◆ gpioRead()

- -
-
- - - - - - - - -
int gpioRead (unsigned gpio)
-
- -

Reads the GPIO level, on or off, 0 or 1. Arduino style: digitalRead. Wheter a pin has been set as input or output it can be read with this function.

-
Parameters
- - -
gpio3-40
-
-
-
Returns
Returns the GPIO level if OK, otherwise a negative number
-
printf("pin 24 is level %d", gpioRead(24));
-
int gpioRead(unsigned gpio)
Reads the GPIO level, on or off, 0 or 1. Arduino style: digitalRead. Wheter a pin has been set as inp...
Definition: nano.c:1424
-
-
-
- -

◆ gpioSetISRFunc()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int gpioSetISRFunc (unsigned gpio,
unsigned edge,
unsigned debounce,
unsigned long * timestamp,
void(*)() f 
)
-
- -

Registers a function to be called (a callback) whenever the specified.

-

GPIO interrupt occurs. This function will start a thread that will monitor the status of the interrupt.One function may be registered per GPIO.

Parameters
- - - - - - -
gpio3-40
edgeRISING_EDGE, FALLING_EDGE, or EITHER_EDGE
debounce0-1000 useconds, to avoid bouncing specially on mechanical inputs
timestamptimestamp of the detected edge in nanoseconds in EPOCH format
fthe callback function, this will be execute if an edge is detected in the selected pin
-
-
-
Returns
Returns 0 if OK, otherwise a negative number
-
gpioSetISRFunc(3, RISING_EDGE, 1000, &timestamp, &callback); // Calls the 'callback' function when a rising edge is detected on pin 3, with a debouncing time of 1000 useconds
-
it also delivers the event timestamp on the "timestamp" variable in EPOCH format (nanoseconds)
-
int gpioSetISRFunc(unsigned gpio, unsigned edge, unsigned debounce, unsigned long *timestamp, void(*f)())
Registers a function to be called (a callback) whenever the specified.
Definition: nano.c:1778
-
-
-
- -

◆ gpioSetMode()

- -
-
- - - - - - - - - - - - - - - - - - -
int gpioSetMode (unsigned gpio,
unsigned mode 
)
-
- -

Sets the GPIO mode, typically input or output.

-
Parameters
- - - -
gpio3-40
modeJET_INPUT, JET_OUTPUT
-
-
-
Returns
Returns 0 if OK, -1 otherwise
-
gpioSetMode(17, JET_INPUT); // Sets pin 17 as input.
-
int gpioSetMode(unsigned gpio, unsigned mode)
Sets the GPIO mode, typically input or output.
Definition: nano.c:1004
-
gpioSetMode(18, JET_OUTPUT); // Sets pin 18 as output.
-
-
-
- -

◆ gpioSetPWMfrequency()

- -
-
- - - - - - - - - - - - - - - - - - -
int gpioSetPWMfrequency (unsigned gpio,
unsigned frequency 
)
-
- -

Sets the frequency in hertz to be used for the GPIO.

-
Parameters
- - - -
gpioNano: 32, 33 Orin Nano,NX: 15, 32, 33 Orin AGX: 13, 15, 18
frequency25Hz to 187 kHz on Nano and 50 Hz to 1593 kHz on Orin
-
-
-
Returns
Returns 1 if OK, a negative number otherwise
-
gpioSetPWMfrequency(32, 10000); // Setting up PWM frequency=10kHz @ pin 32
-
int gpioSetPWMfrequency(unsigned gpio, unsigned frequency)
Sets the frequency in hertz to be used for the GPIO.
Definition: nano.c:2022
-
-
-
- -

◆ gpioTerminate()

- -
-
- - - - - - - - -
void gpioTerminate (void )
-
- -

Terminates the library. This function restores the used registers to their previous state and releases memory.

-
Returns
Returns nothing
-
-
void gpioTerminate(void)
Terminates the library. This function restores the used registers to their previous state and release...
Definition: nano.c:701
-
-
-
- -

◆ gpioWrite()

- -
-
- - - - - - - - - - - - - - - - - - -
int gpioWrite (unsigned gpio,
unsigned level 
)
-
- -

Sets the GPIO level, on or off. Arduino style: digitalWrite.

-
Parameters
- - - -
gpio3-40
level0-1
-
-
-
Returns
Returns 0 if OK, otherwise a negative number
-
gpioWrite(24, 1); // Sets pin 24 high.
-
int gpioWrite(unsigned gpio, unsigned level)
Sets the GPIO level, on or off. Arduino style: digitalWrite.
Definition: nano.c:1521
-
-
-
- -

◆ i2cClose()

- -
-
- - - - - - - - -
int i2cClose (unsigned handle)
-
- -

This closes the I2C device associated with the handle.

-
Parameters
- - -
handle>=0, as returned by a call to [i2cOpen]
-
-
-
Returns
Returns 0 if OK, otherwise a negative number
-
i2cClose(MPU6050); //Closing previously opened connection
-
int i2cClose(unsigned handle)
This closes the I2C device associated with the handle.
Definition: nano.c:2172
-
-
-
- -

◆ i2cOpen()

- -
-
- - - - - - - - - - - - - - - - - - -
int i2cOpen (unsigned i2cBus,
unsigned i2cFlags 
)
-
- -

This returns a handle for the device at the address on the I2C bus.

-
Parameters
- - - - - -
i2cBus0 or 1, 0 are pins 27 (SDA) & 28 (SCL), 1 are pins 3(SDA) & 5(SCL) In Orin the pins are the same but the i2c devices are: 0->i2c-1 & 1->i2c-7 Flags allow you to change the bus speed. NOTE - FLAGS WILL NOT CAUSE ANY EFFECT FOR MACHINES WITH JETPACK >= 6:
i2cFlags0 -> 100 kHz
i2cFlags1 -> 400 kHz
i2cFlags2 -> 1 MHz
-
-
-
Returns
Returns a handle with the I2C bus number being opened (>=0) if OK, otherwise a negative number
-
int MPU6050 = i2cOpen(0,0); //Opening a connection on pins 27/28 at speed 100kHz
-
int i2cOpen(unsigned i2cBus, unsigned i2cFlags)
This returns a handle for the device at the address on the I2C bus.
Definition: nano.c:2091
-
-
-
- -

◆ i2cReadByteData()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int i2cReadByteData (unsigned handle,
unsigned i2cAddr,
unsigned i2cReg 
)
-
- -

This reads a single byte from the specified register of the device associated with handle.

-
Parameters
- - - - -
handle>=0, as returned by a call to [i2cOpen]
i2cAddr0-0x7F, the I2C slave address
i2cReg0-255, the register to read
-
-
-
Returns
Returns the byte read (>=0) if OK, otherwise a negative number
-
gyro_x_H = i2cReadByteData(MPU6050, 0x68, 0x43); // getting register 0x43 out of opened connection MPU6050 with i2C address 0x68
-
int i2cReadByteData(unsigned handle, unsigned i2cAddr, unsigned i2cReg)
This reads a single byte from the specified register of the device associated with handle.
Definition: nano.c:2249
-
-
-
- -

◆ i2cReadWordData()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
int i2cReadWordData (unsigned handle,
unsigned i2cAddr,
unsigned i2cReg 
)
-
- -

This reads two bytes from the specified consecutive register(s) of the device associated with handle.

-
Parameters
- - - - -
handle>=0, as returned by a call to [i2cOpen]
i2cAddr0-0x7F, the I2C slave address
i2cReg0-255, the register to read
-
-
-
Returns
Returns the word read (>=0) if OK, otherwise a negative number
-
gyro_x_H = i2cReadWordData(MPU6050, 0x68, 0x43); // getting register 0x43 and 0x44 out of opened connection MPU6050 with i2C address 0x68
-
int i2cReadWordData(unsigned handle, unsigned i2cAddr, unsigned i2cReg)
This reads two bytes from the specified consecutive register(s) of the device associated with handle.
Definition: nano.c:2344
-
-
-
- -

◆ i2cWriteByteData()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int i2cWriteByteData (unsigned handle,
unsigned i2cAddr,
unsigned i2cReg,
unsigned bVal 
)
-
- -

This writes a single byte to the specified register of the device associated with handle.

-
Parameters
- - - - - -
handle>=0, as returned by a call to [i2cOpen]
i2cAddr0-0x7F, the I2C slave address
i2cReg0-255, the register to write
bVal0-0xFF, the value to write
-
-
-
Returns
Returns 0 if OK, negative number otherwise
-
writestat = i2cWriteByteData(MPU6050, 0x68, 0x1B, 0x00); // writing 0x00 to register address 0x1B on opened chanel MPU6050 with i2C address 0x68
-
int i2cWriteByteData(unsigned handle, unsigned i2cAddr, unsigned i2cReg, unsigned bVal)
This writes a single byte to the specified register of the device associated with handle.
Definition: nano.c:2199
-
-
-
- -

◆ i2cWriteWordData()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int i2cWriteWordData (unsigned handle,
unsigned i2cAddr,
unsigned i2cReg,
unsigned wVal 
)
-
- -

This writes two bytes to the specified consecutive register(s) of the device associated with handle.

-
Parameters
- - - - - -
handle>=0, as returned by a call to [i2cOpen]
i2cAddr0-0x7F, the I2C slave address
i2cReg0-255, the register to write
wVal0-0xFFFF, the value to write
-
-
-
Returns
Returns 0 if OK, negative number otherwise
-
writestat = i2cWriteWordData(MPU6050, 0x68, 0x1B, 0x0000); // writing 0x0000 to register address 0x1B & 0x1C on opened chanel MPU6050 with i2C address 0x68
-
int i2cWriteWordData(unsigned handle, unsigned i2cAddr, unsigned i2cReg, unsigned wVal)
This writes two bytes to the specified consecutive register(s) of the device associated with handle.
Definition: nano.c:2294
-
-
-
- -

◆ spiClose()

- -
-
- - - - - - - - -
int spiClose (unsigned handle)
-
- -

This functions closes the SPI device identified by the handle.

-
Parameters
- - -
handle>=0, as returned by a call to [spiOpen]
-
-
-
Returns
Returns 0 if OK, otherwise a negative number
-
spiClose(SPI_init); //closing previously opened spi port with handle SPI_init
-
int spiClose(unsigned handle)
This functions closes the SPI device identified by the handle.
Definition: nano.c:2547
-
-
-
- -

◆ spiOpen()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int spiOpen (unsigned spiChan,
unsigned speed,
unsigned mode,
unsigned cs_delay,
unsigned bits_word,
unsigned lsb_first,
unsigned cs_change 
)
-
- -

This function returns a handle for the SPI device on the channel. Data will be transferred at baud bits per second. The flags may be used to modify the default behaviour of a 4-wire operation, mode 0, active low chip select. There are 2 SPI channels called SPI1 & SPI2 on Nano and SPI0 & SPI1 on Orin Nano & NX. For Orin AGX there is only 1 SPI channel: SPI1 (pins 21, 19...so forth). The pins used are given in the following table.

- - - - - - - -
Port MISO MOSI SCLK CS0 CS1
SPI1/SPI0 21 19 23 24 26
SPI2/SPI1 22 37 13 18 16
-
Parameters
- - - - -
spiChan0-1 (0 stands for SPI1 on Nano, SPI0 on Orin Nano and SPI1 on Orin AGX, 1 stands for SPI2 on Nano and SPI1 on Orin Nano)
speedup to 50M (beyond that expect problems, actually we are not going beyond that)
modedefines the SPI mode
-
-
- - - - - - - - - - - -
Mode POL PHA
0 0 0
1 0 1
2 1 0
3 1 1
-
Parameters
- - - - - -
cs_delaydelay if nonzero, how long to delay after the last bit transfer in us before optionally deselecting the device before the next transfer
bits_wordbits per word from 1 to 32 bits
lsb_firstis 1 if least significant bit first 0 otherwise
cs_changeis 1 to deselect device before starting the next transfer otherwise 0
-
-
-
Returns
Returns a handle (>=0) if OK, otherwise a negative number
-
SPI_init = spiOpen(1, 5000000, 0, 0, 8, 1, 1); // SPI2 (pins 22/37, 500 kHz, mode 0, cs delay 0, 8 bits/word,lsb first 1, cs change 1
-
int spiOpen(unsigned spiChan, unsigned speed, unsigned mode, unsigned cs_delay, unsigned bits_word, unsigned lsb_first, unsigned cs_change)
This function returns a handle for the SPI device on the channel. Data will be transferred at baud bi...
Definition: nano.c:2389
-
-
-
- -

◆ spiXfer()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int spiXfer (unsigned handle,
char * txBuf,
char * rxBuf,
unsigned len 
)
-
- -

This function transfers len bytes of data from txBuf to the SPI device associated with the handle. Simultaneously len bytes of data are read from the device and placed in rxBuf.

-
Parameters
- - - - - -
handle>=0, as returned by a call to [spiOpen]
txBufthe data bytes to write
rxBufthe received data bytes
lenthe number of bytes to transfer
-
-
-
Returns
Returns the number of bytes transferred if OK, otherwise a negative number.
-
spiXfer(SPI_init, tx, rx, 7); //transfers tx data with a data lenght of 7 words and receiving rx data from prevously opened connection with handle SPI_init
-
int spiXfer(unsigned handle, char *txBuf, char *rxBuf, unsigned len)
This function transfers len bytes of data from txBuf to the SPI device associated with the handle....
Definition: nano.c:2569
-
-
-
-
-
- - - - diff --git a/github_bad/docs/html/jetgpio_8h.js b/github_bad/docs/html/jetgpio_8h.js deleted file mode 100644 index 3324f1d..0000000 --- a/github_bad/docs/html/jetgpio_8h.js +++ /dev/null @@ -1,20 +0,0 @@ -var jetgpio_8h = -[ - [ "gpioInitialise", "jetgpio_8h.html#a80d84e5dd32fd8ec04cb0370eab0a5b0", null ], - [ "gpioPWM", "jetgpio_8h.html#a81675c68b04f3c19be1f743eae7f2136", null ], - [ "gpioRead", "jetgpio_8h.html#a754d22c52d797f32f02c86863496b0ec", null ], - [ "gpioSetISRFunc", "jetgpio_8h.html#ac0fe13b9811377a2f2fec9921795fb8f", null ], - [ "gpioSetMode", "jetgpio_8h.html#ab343b74f5cb62baaaded18e4ff1ed939", null ], - [ "gpioSetPWMfrequency", "jetgpio_8h.html#a982f8292ecf78abc5bdeeb330a2e0a05", null ], - [ "gpioTerminate", "jetgpio_8h.html#a404d80a9a9292869c1a2b86f183b3774", null ], - [ "gpioWrite", "jetgpio_8h.html#a15ec7e76572f925b9e206018fd5d22e9", null ], - [ "i2cClose", "jetgpio_8h.html#aac119696ea99a19576c6fe858bb8a031", null ], - [ "i2cOpen", "jetgpio_8h.html#aaf4b600818f342b2723043fb9fd594c0", null ], - [ "i2cReadByteData", "jetgpio_8h.html#ae76dd5363acd174d24526f54c665c629", null ], - [ "i2cReadWordData", "jetgpio_8h.html#a54bb3be857e985a527e91e55a1315c21", null ], - [ "i2cWriteByteData", "jetgpio_8h.html#a642db3078905bf982f784fb7b428bda4", null ], - [ "i2cWriteWordData", "jetgpio_8h.html#a9a4e911447c30f1c74727334668535e2", null ], - [ "spiClose", "jetgpio_8h.html#a9fb213bb27196cab00718d2fdfb33688", null ], - [ "spiOpen", "jetgpio_8h.html#a2532ad45eb33d8d476c4d6036f694702", null ], - [ "spiXfer", "jetgpio_8h.html#a96e92eb729c89f2a9a893adf83251dc8", null ] -]; \ No newline at end of file diff --git a/github_bad/docs/html/jetgpio_8h__incl.dot b/github_bad/docs/html/jetgpio_8h__incl.dot deleted file mode 100644 index de8d759..0000000 --- a/github_bad/docs/html/jetgpio_8h__incl.dot +++ /dev/null @@ -1,11 +0,0 @@ -digraph "jetgpio.h" -{ - // LATEX_PDF_SIZE - edge [fontname="Helvetica",fontsize="10",labelfontname="Helvetica",labelfontsize="10"]; - node [fontname="Helvetica",fontsize="10",shape=record]; - Node1 [label="jetgpio.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled", fontcolor="black",tooltip=" "]; - Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node2 [label="stddef.h",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; - Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="Helvetica"]; - Node3 [label="stdint.h",height=0.2,width=0.4,color="grey75", fillcolor="white", style="filled",tooltip=" "]; -} diff --git a/github_bad/docs/html/jetgpio_8h_source.html b/github_bad/docs/html/jetgpio_8h_source.html deleted file mode 100644 index 3cd6083..0000000 --- a/github_bad/docs/html/jetgpio_8h_source.html +++ /dev/null @@ -1,597 +0,0 @@ - - - - - - - -Jetgpio: jetgpio.h Source File - - - - - - - - - - - - - -
-
- - - - - - -
-
Jetgpio -  1.2 -
-
C library to manage the GPIO header of the Nvidia JETSON boards
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
jetgpio.h
-
-
-Go to the documentation of this file.
1 /*
-
2 This is free and unencumbered software released into the public domain.
-
3 Anyone is free to copy, modify, publish, use, compile, sell, or
-
4 distribute this software, either in source code form or as a compiled
-
5 binary, for any purpose, commercial or non-commercial, and by any
-
6 means.
-
7 In jurisdictions that recognize copyright laws, the author or authors
-
8 of this software dedicate any and all copyright interest in the
-
9 software to the public domain. We make this dedication for the benefit
-
10 of the public at large and to the detriment of our heirs and
-
11 successors. We intend this dedication to be an overt act of
-
12 relinquishment in perpetuity of all present and future rights to this
-
13 software under copyright law.
-
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-
15 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-
16 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-
17 IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-
18 OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-
19 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-
20 OTHER DEALINGS IN THE SOFTWARE.
-
21 For more information, please refer to <http://unlicense.org/>
-
22 */
-
23 
-
24 /* jetgpio version 1.1 */
-
27 #ifndef jetgpio_h__
-
28 #define jetgpio_h__
-
29 
-
30 #include <stddef.h>
-
31 #include <stdint.h>
-
32 
-
33 /* Definitions */
-
34 
-
35 /* Chip id for Nano Classic & Orin */
-
36 
-
37 #define APB_MISC_BASE 0x70000000 //Base Nano already defined as baseCFG
-
38 #define MISC 0x00100000 //Base Orin
-
39 #define APB_MISC_GP_HIDREV_0 0x804 //Offset Nano
-
40 #define MISCREG_HIDREV_0 0x4 //Offset Orin
-
41 
-
42 /* GPIO base address Nano Classic */
-
43 
-
44 #define base_CNF 0x6000d000
-
45 #define base_PINMUX 0x70003000
-
46 #define base_CFG 0x70000000
-
47 
-
48 /* PWM Control Nano Classic */
-
49 
-
50 #define base_PWM 0x7000a000 // PWM Controller base address
-
51 #define PM3_PWM0 0x00 // PWM0 pin 32 LCD_BL_PWM
-
52 #define PM3_PWM2 0x20 // PWM2 pin 33 GPIO_PE6
-
53 
-
54 /* Clock and Reset Controller Nano Classic */
-
55 
-
56 #define CAR 0x60006000 // Clock and Reset Controller (CAR) base address
-
57 #define CLK_RST_CONTROLLER_CLK_OUT_ENB_L_0 0x10 // CLK_RST_CONTROLLER_CLK_OUT_ENB_L_0 offset
-
58 #define CLK_RST_CONTROLLER_CLK_OUT_ENB_H_0 0x14 // CLK_RST_CONTROLLER_CLK_OUT_ENB offset
-
59 #define CLK_RST_CONTROLLER_RST_DEVICES_H_0 0x8 // Reset the spi controllers
-
60 #define CLK_RST_CONTROLLER_CLK_SOURCE_SPI2_0 0x118 // CLK_RST_CONTROLLER_CLK_SOURCE_SPI2_0 source clock and divider spi2
-
61 #define CLK_RST_CONTROLLER_CLK_SOURCE_SPI1_0 0x134 // CLK_RST_CONTROLLER_CLK_SOURCE_SPI1_0 source clokc and divider spi1
-
62 #define CLK_RST_CONTROLLER_CLK_ENB_L_SET_0 0x320 // CLK_RST_CONTROLLER_CLK_ENB_L_SET_0 offset
-
63 
-
64 /* Power Management Controller Nano Classic */
-
65 
-
66 #define base_PMC 0x7000e000 // Power Management Controller (PMC) base address
-
67 #define APBDEV_PMC_PWR_DET_VAL_0 0xe4 // APBDEV_PMC_PWR_DET_VAL_0
-
68 #define APBDEV_PMC_PWR_DET_0 0x48 // APBDEV_PMC_PWR_DET_0
-
69 #define APBDEV_PMC_PWR_DET_LATCH_0 0x4c // APBDEV_PMC_PWR_DET_LATCH_0
-
70 
-
71 /* GPIO CNF registers Nano Classic */
-
72 
-
73 #define CNF_3 0x204 // Pin 3 GEN2_I2C_SDA 0x6000d204
-
74 #define CNF_5 0x204 // Pin 5 GEN2_I2C_SCL
-
75 #define CNF_7 0x60C // Pin 7 AUD_MCLK
-
76 #define CNF_8 0x108 // Pin 8 UART2_TX
-
77 #define CNF_10 0x108 // Pin 10 UART2_RX
-
78 #define CNF_11 0x108 // Pin 11 UART2_RTS
-
79 #define CNF_12 0x204 // Pin 12 DAP4_SCLK
-
80 #define CNF_13 0x004 // Pin 13 SPI2_SCK
-
81 #define CNF_15 0x600 // Pin 15 LCD_TE
-
82 #define CNF_16 0x704 // Pin 16 SPI2_CS1
-
83 #define CNF_18 0x004 // Pin 18 SPI2_CS0
-
84 #define CNF_19 0x008 // Pin 19 SPI1_MOSI
-
85 #define CNF_21 0x008 // Pin 21 SPI1_MISO
-
86 #define CNF_22 0x004 // Pin 22 SPI2_MISO
-
87 #define CNF_23 0x008 // Pin 23 SPI1_SCK
-
88 #define CNF_24 0x008 // Pin 24 SPI1_CS0
-
89 #define CNF_26 0x008 // Pin 26 SPI1_CS1
-
90 #define CNF_27 0x204 // Pin 27 GEN1_I2C_SDA
-
91 #define CNF_28 0x204 // Pin 28 GEN1_I2C_SCL
-
92 #define CNF_29 0x408 // Pin 29 CAM_AF_EN
-
93 #define CNF_31 0x604 // Pin 31 GPIO_PZ0
-
94 #define CNF_32 0x504 // Pin 32 LCD_BL_PWM
-
95 #define CNF_33 0x100 // Pin 33 GPIO_PE6
-
96 #define CNF_35 0x204 // Pin 35 DAP4_FS
-
97 #define CNF_36 0x108 // Pin 36 UART2_CTS
-
98 #define CNF_37 0x004 // Pin 37 SPI2_MOSI
-
99 #define CNF_38 0x204 // Pin 38 DAP4_DIN
-
100 #define CNF_40 0x204 // Pin 40 DAP4_DOUT
-
101 
-
102 /* GPIO Pinmux registers Nano Classic */
-
103 
-
104 #define PINMUX_3 0x0c8 // Pinmux 3 PINMUX_AUX_GEN2_I2C_SDA_0 0x700030c8
-
105 #define PINMUX_5 0x0c4 // Pinmux 5 PINMUX_AUX_GEN2_I2C_SCL_0
-
106 #define PINMUX_7 0x180 // Pinmux 7 PINMUX_AUX_AUD_MCLK_0
-
107 #define PINMUX_8 0x0f4 // Pinmux 8 PINMUX_AUX_UART2_TX_0
-
108 #define PINMUX_10 0x0f8 // Pinmux 10 PINMUX_AUX_UART2_RX_0
-
109 #define PINMUX_11 0x0fc // Pinmux 11 PINMUX_AUX_UART2_RTS_0
-
110 #define PINMUX_12 0x150 // Pinmux 12 PINMUX_AUX_DAP4_SCLK_0
-
111 #define PINMUX_13 0x06c // Pinmux 13 PINMUX_AUX_SPI2_SCK_0
-
112 #define PINMUX_15 0x1f8 // Pinmux 15 PINMUX_AUX_LCD_TE_0
-
113 #define PINMUX_16 0x074 // Pinmux 16 PINMUX_AUX_SPI2_CS1_0
-
114 #define PINMUX_18 0x070 // Pinmux 18 PINMUX_AUX_SPI2_CS0_0
-
115 #define PINMUX_19 0x050 // Pinmux 19 PINMUX_AUX_SPI1_MOSI_0
-
116 #define PINMUX_21 0x054 // Pinmux 21 PINMUX_AUX_SPI1_MISO_0
-
117 #define PINMUX_22 0x068 // Pinmux 22 PINMUX_AUX_SPI2_MISO_0
-
118 #define PINMUX_23 0x058 // Pinmux 23 PINMUX_AUX_SPI1_SCK_0
-
119 #define PINMUX_24 0x05c // Pinmux 24 PINMUX_AUX_SPI1_CS0_0
-
120 #define PINMUX_26 0x060 // Pinmux 26 PINMUX_AUX_SPI1_CS1_0
-
121 #define PINMUX_27 0x0c0 // Pinmux 27 PINMUX_AUX_GEN1_I2C_SDA_0
-
122 #define PINMUX_28 0x0bc // Pinmux 28 PINMUX_AUX_GEN1_I2C_SCL_0
-
123 #define PINMUX_29 0x1e4 // Pinmux 29 PINMUX_AUX_CAM_AF_EN_0
-
124 #define PINMUX_31 0x27c // Pinmux 31 PINMUX_AUX_GPIO_PZ0_0
-
125 #define PINMUX_32 0x1fc // Pinmux 32 PINMUX_AUX_LCD_BL_PWM_0
-
126 #define PINMUX_33 0x248 // Pinmux 33 PINMUX_AUX_GPIO_PE6_0
-
127 #define PINMUX_35 0x144 // Pinmux 35 PINMUX_AUX_DAP4_FS_0
-
128 #define PINMUX_36 0x100 // Pinmux 36 PINMUX_AUX_UART2_CTS_0
-
129 #define PINMUX_37 0x064 // Pinmux 37 PINMUX_AUX_SPI2_MOSI_0
-
130 #define PINMUX_38 0x148 // Pinmux 38 PINMUX_AUX_DAP4_DIN_0
-
131 #define PINMUX_40 0x14c // Pinmux 40 PINMUX_AUX_DAP4_DOUT_0
-
132 
-
133 /* GPIO Cfg registers Nano Classic */
-
134 
-
135 #define CFG_3 0x9b4 // Config 3 GEN2_I2C_SDA_CFG 0x700009b4
-
136 #define CFG_5 0x9b0 // Config 5 GEN2_I2C_SCL_CFG
-
137 #define CFG_7 0x8f4 // Config 7 AUD_MCLK_CFG
-
138 #define CFG_8 0xb38 // Config 8 UART2_TX_CFG
-
139 #define CFG_10 0xb34 // Config 10 UART2_RX_CFG
-
140 #define CFG_11 0xb30 // Config 11 UART2_RTS_CFG
-
141 #define CFG_12 0x980 // Config 12 DAP4_SCLK_CFG
-
142 #define CFG_13 0xaf8 // Config 13 SPI2_SCK_CFG
-
143 #define CFG_15 0xa44 // Config 15 LCD_TE_CFG
-
144 #define CFG_16 0xaec // Config 16 SPI2_CS1_CFG
-
145 #define CFG_18 0xae8 // Config 18 SPI2_CS0_CFG
-
146 #define CFG_19 0xae0 // Config 19 SPI1_MOSI_CFG
-
147 #define CFG_21 0xadc // Config 21 SPI1_MISO_CFG
-
148 #define CFG_22 0xaf0 // Config 22 SPI2_MISO_CFG
-
149 #define CFG_23 0xae4 // Config 23 SPI1_SCK_CFG
-
150 #define CFG_24 0xad4 // Config 24 SPI1_CS0_CFG
-
151 #define CFG_26 0xad8 // Config 26 SPI1_CS1_CFG
-
152 #define CFG_27 0x9ac // Config 27 GEN1_I2C_SDA_CFG
-
153 #define CFG_28 0x9a8 // Config 28 GEN1_I2C_SCL_CFG
-
154 #define CFG_29 0x92c // Config 29 CAM_AF_EN_CFG
-
155 #define CFG_31 0x9fc // Config 31 GPIO_PZ0_CFG
-
156 #define CFG_32 0xa34 // Config 32 LCD_BL_PWM_CFG
-
157 #define CFG_33 0x9c8 // Config 33 GPIO_PE6_CFG
-
158 #define CFG_35 0x97c // Config 35 DAP4_FS_CFG
-
159 #define CFG_36 0xb2c // Config 36 UART2_CTS_CFG
-
160 #define CFG_37 0xaf4 // Config 37 SPI2_MOSI_CFG
-
161 #define CFG_38 0x974 // Config 38 DAP4_DIN_CFG
-
162 #define CFG_40 0x978 // Config 40 DAP4_DOUT_CFG
-
163 
-
164 /* Typical values Pinmux & Cfg registers Nano Classic */
-
165 
-
166 #define PINMUX_IN 0x00000040 // Typical for pinmux register as input
-
167 #define PINMUX_OUT 0x00000440 // Typical for pinmux register as output
-
168 #define PINMUX_OUT1 0x0000e240 // Typical for pinmux spi pins register as output
-
169 #define CFG_IN 0x00000000 // Typical for config register as input
-
170 #define CFG_OUT 0x01F1F000 // Typical for config register as output
-
171 #define CFG_OUT1 0xF0000000 // Typical for config spi pins register as output
-
172 
-
173 /* GPIO base address Orin */
-
174 
-
175 #define base_CNF_AON 0x0c2f1000 // Base address Nano AON: 3,5,27,28 AGX: 3,5,16,27,28,29,31,32,33,37
-
176 #define base_CNF_NAON 0x02210000 // Base address Nano Non AON: 7,8,10,11,29,31,36,15,12,32,33,35,38,40,13,16,18,19,21,22,23,24,26,37 AGX: 7,8,10,11,36,15,12,35,38,40,13,18,19,21,22,23,24,26
-
177 #define Pinmux_AON 0x0c302000 // Pinmux + config GPIO PADCTL_A14 pad Nano & AGX: 3,5,27,28
-
178 #define Pinmux_AONHV 0x0c303000 // Pinmux + config GPIO PADCTL_A15 pad AGX: 29,31,33,37
-
179 #define Pinmux_G7 0x02448000 // Pinmux + config GPIO PADCTL_A24 pad Nano: 7
-
180 #define Pinmux_G3 0x02430000 // Pinmux + config GPIO PADCTL_A0 pad Nano: 8,10,11,29,31,36 AGX: 8,10,11,13,22,26
-
181 #define Pinmux_EDP 0x02440000 // Pinmux + config GPIO PADCTL_A16 pad Nano & AGX: 15
-
182 #define Pinmux_G4 0x02434000 // Pinmux + config GPIO PADCTL_A4 pad Nano: 12,32,33,35,38,40 AGX: 18
-
183 #define Pinmux_G2 0x0243d000 // Pinmux + config GPIO PADCTL_A13 pad Nano: 13,16,18,19,21,22,23,24,26,37 AGX: 19,21,23,24,26
-
184 
-
185 /* PWM Control Orin */
-
186 
-
187 #define base_PWM1 0x03280000 // PWM1 Controller base address Nano & AGX: pin 15
-
188 #define base_PWM5 0x032c0000 // PWM5 Controller base address Nano: pin 33, AGX: pin 18
-
189 #define base_PWM7 0x032e0000 // PWM7 Controller base address Nano: pin 32
-
190 #define base_PWM8 0x032f0000 // PWM8 Controller base address AGX: pin 13
-
191 
-
192 /* GPIO CNF registers Orin */
-
193 
-
194 #define CNFO_3 0x0640 // Pin 3 AO_GEN8_I2C_SDA_0
-
195 #define CNFO_5 0x0620 // Pin 5 AO_GEN8_I2C_SCL_0
-
196 #define CNFO_7 0x002c0 // Pin 7 G7_SOC_GPIO59_0
-
197 #define CNFO_8 0x02840 // Pin 8 G3_UART1_TX_0
-
198 #define CNFO_10 0x02860 // Pin 10 G3_UART1_RX_0
-
199 #define CNFO_11 0x02880 // Pin 11 G3_UART1_RTS_0
-
200 #define CNFO_12 0x042e0 // Pin 12 G4_SOC_GPIO41_0
-
201 #define CNFO_13 0x01200 // Pin 13 G2_SPI3_SCK_0
-
202 #define CNFO_15 0x02220 // Pin 15 EDP_SOC_GPIO39_0
-
203 #define CNFO_16 0x01280 // Pin 16 G2_SPI3_CS1_0
-
204 #define CNFO_18 0x01260 // Pin 18 G2_SPI3_CS0_0
-
205 #define CNFO_19 0x014a0 // Pin 19 G2_SPI1_MOSI_0
-
206 #define CNFO_21 0x01480 // Pin 21 G2_SPI1_MISO_0
-
207 #define CNFO_22 0x01220 // Pin 22 G2_SPI3_MISO_0
-
208 #define CNFO_23 0x01460 // Pin 23 G2_SPI1_SCK_0
-
209 #define CNFO_24 0x014c0 // Pin 24 G2_SPI1_CS0_0
-
210 #define CNFO_26 0x014e0 // Pin 26 G2_SPI1_CS1_0
-
211 #define CNFO_27 0x0600 // Pin 27 AO_GEN2_I2C_SDA_0
-
212 #define CNFO_28 0x04e0 // Pin 28 AO_GEN2_I2C_SCL_0
-
213 #define CNFO_29 0x026a0 // Pin 29 G3_SOC_GPIO32_0
-
214 #define CNFO_31 0x026c0 // Pin 31 G3_SOC_GPIO33_0
-
215 #define CNFO_32 0x040c0 // Pin 32 G4_SOC_GPIO19_0
-
216 #define CNFO_33 0x04200 // Pin 33 G4_SOC_GPIO21_0
-
217 #define CNFO_35 0x04440 // Pin 35 G4_SOC_GPIO44_0
-
218 #define CNFO_36 0x028a0 // Pin 36 G3_UART1_CTS_0
-
219 #define CNFO_37 0x01240 // Pin 37 G2_SPI3_MOSI_0
-
220 #define CNFO_38 0x04420 // Pin 38 G4_SOC_GPIO43_0
-
221 #define CNFO_40 0x04400 // Pin 40 G4_SOC_GPIO42_0
-
222 
-
223 /* GPIO Pinmux registers Orin */
-
224 
-
225 #define PINMUXO_3 0x18 // Pinmux 3 AO_GEN8_I2C_SDA_0
-
226 #define PINMUXO_5 0x20 // Pinmux 5 AO_GEN8_I2C_SCL_0
-
227 #define PINMUXO_7 0x30 // Pinmux 7 G7_SOC_GPIO59_0
-
228 #define PINMUXO_8 0xa8 // Pinmux 8 G3_UART1_TX_0
-
229 #define PINMUXO_10 0xa0 // Pinmux 10 G3_UART1_RX_0
-
230 #define PINMUXO_11 0x98 // Pinmux 11 G3_UART1_RTS_0
-
231 #define PINMUXO_12 0x88 // Pinmux 12 G4_SOC_GPIO41_0
-
232 #define PINMUXO_13 0x30 // Pinmux 13 G2_SPI3_SCK_0
-
233 #define PINMUXO_15 0x20 // Pinmux 15 EDP_SOC_GPIO39_0
-
234 #define PINMUXO_16 0x20 // Pinmux 16 G2_SPI3_CS1_0
-
235 #define PINMUXO_18 0x10 // Pinmux 18 G2_SPI3_CS0_0
-
236 #define PINMUXO_19 0x40 // Pinmux 19 G2_SPI1_MOSI_0
-
237 #define PINMUXO_21 0x18 // Pinmux 21 G2_SPI1_MISO_0
-
238 #define PINMUXO_22 0x0 // Pinmux 22 G2_SPI3_MISO_0
-
239 #define PINMUXO_23 0x28 // Pinmux 23 G2_SPI1_SCK_0
-
240 #define PINMUXO_24 0x8 // Pinmux 24 G2_SPI1_CS0_0
-
241 #define PINMUXO_26 0x38 // Pinmux 26 G2_SPI1_CS1_0
-
242 #define PINMUXO_27 0x40 // Pinmux 27 AO_GEN2_I2C_SDA_0
-
243 #define PINMUXO_28 0x30 // Pinmux 28 AO_GEN2_I2C_SCL_0
-
244 #define PINMUXO_29 0x68 // Pinmux 29 G3_SOC_GPIO32_0
-
245 #define PINMUXO_31 0x70 // Pinmux 31 G3_SOC_GPIO33_0
-
246 #define PINMUXO_32 0x80 // Pinmux 32 G4_SOC_GPIO19_0
-
247 #define PINMUXO_33 0X40 // Pinmux 33 G4_SOC_GPIO21_0
-
248 #define PINMUXO_35 0xa0 // Pinmux 35 G4_SOC_GPIO44_0
-
249 #define PINMUXO_36 0x90 // Pinmux 36 G3_UART1_CTS_0
-
250 #define PINMUXO_37 0x48 // Pinmux 37 G2_SPI3_MOSI_0
-
251 #define PINMUXO_38 0x98 // Pinmux 38 G4_SOC_GPIO43_0
-
252 #define PINMUXO_40 0x90 // Pinmux 40 G4_SOC_GPIO42_0
-
253 
-
254 /* GPIO Cfg registers Orin */
-
255 
-
256 #define CFGO_3 0x1c // Config 3 AO_CFG2TMC_GEN8_I2C_SDA_0
-
257 #define CFGO_5 0X24 // Config 5 AO_CFG2TMC_GEN8_I2C_SCL_0
-
258 #define CFGO_7 0x34 // Config 7 G7_CFG2TMC_SOC_GPIO59_0
-
259 #define CFGO_8 0xac // Config 8 G3_CFG2TMC_UART1_TX_0
-
260 #define CFGO_10 0xa4 // Config 10 G3_CFG2TMC_UART1_RX_0
-
261 #define CFGO_11 0x9c // Config 11 G3_CFG2TMC_UART1_RTS_0
-
262 #define CFGO_12 0x8c // Config 12 G4_CFG2TMC_SOC_GPIO41_0
-
263 #define CFGO_13 0x34 // Config 13 G2_CFG2TMC_SPI3_SCK_0
-
264 #define CFGO_15 0x24 // Config 15 EDP_CFG2TMC_SOC_GPIO39_0
-
265 #define CFGO_16 0x24 // Config 16 G2_CFG2TMC_SPI3_CS1_0
-
266 #define CFGO_18 0x14 // Config 18 G2_CFG2TMC_SPI3_CS0_0
-
267 #define CFGO_19 0x44 // Config 19 G2_CFG2TMC_SPI1_MOSI_0
-
268 #define CFGO_21 0x1c // Config 21 G2_CFG2TMC_SPI1_MISO_0
-
269 #define CFGO_22 0x4 // Config 22 G2_CFG2TMC_SPI3_MISO_0
-
270 #define CFGO_23 0x2c // Config 23 G2_CFG2TMC_SPI1_SCK_0
-
271 #define CFGO_24 0xc // Config 24 G2_CFG2TMC_SPI1_CS0_0
-
272 #define CFGO_26 0x3c // Config 26 G2_CFG2TMC_SPI1_CS1_0
-
273 #define CFGO_27 0x44 // Config 27 AO_CFG2TMC_GEN2_I2C_SDA_0
-
274 #define CFGO_28 0x34 // Config 28 AO_CFG2TMC_GEN2_I2C_SCL_0
-
275 #define CFGO_29 0x6c // Config 29 G3_CFG2TMC_SOC_GPIO32_0
-
276 #define CFGO_31 0x74 // Config 31 G3_CFG2TMC_SOC_GPIO33_0
-
277 #define CFGO_32 0x84 // Config 32 G4_CFG2TMC_SOC_GPIO19_0
-
278 #define CFGO_33 0x44 // Config 33 G4_CFG2TMC_SOC_GPIO21_0
-
279 #define CFGO_35 0xa4 // Config 35 G4_CFG2TMC_SOC_GPIO44_0
-
280 #define CFGO_36 0x94 // Config 36 G3_CFG2TMC_UART1_CTS_0
-
281 #define CFGO_37 0x4c // Config 37 G2_CFG2TMC_SPI3_MOSI_0
-
282 #define CFGO_38 0x9c // Config 38 G4_CFG2TMC_SOC_GPIO43_0
-
283 #define CFGO_40 0x94 // Config 40 G4_CFG2TMC_SOC_GPIO42_0
-
284 
-
285 /* GPIO CNF registers Orin AGX */
-
286 
-
287 #define CNFOX_7 0x026c0 // Pin 7 G3_SOC_GPIO33_0
-
288 #define CNFOX_13 0x02800 // Pin 13 G3_SOC_GPIO37_0
-
289 #define CNFOX_16 0x0a20 // Pin 16 AO_HV_CAN1_EN_0
-
290 #define CNFOX_18 0x04200 // Pin 18 G4_SOC_GPIO21_0
-
291 #define CNFOX_22 0x02480 // Pin 22 G3_SOC_GPIO23_0
-
292 #define CNFOX_29 0x0820 // Pin 29 AO_HV_CAN0_DIN_0
-
293 #define CNFOX_31 0x0800 // Pin 31 AO_HV_CAN0_DOUT_0
-
294 #define CNFOX_32 0x0a00 // Pin 32 AO_HV_CAN1_STB_0
-
295 #define CNFOX_33 0x0840 // Pin 33 AO_HV_CAN1_DOUT_0
-
296 #define CNFOX_37 0x0860 // Pin 37 AO_HV_CAN1_DIN_0
-
297 
-
298 /* GPIO Pinmux registers Orin AGX */
-
299 
-
300 #define PINMUXOX_7 0x70 // Pinmux 7 G3_SOC_GPIO33_0
-
301 #define PINMUXOX_13 0x80 // Pinmux 13 G3_SOC_GPIO37_0
-
302 #define PINMUXOX_16 0x48 // Pinmux 16 AO_HV_CAN1_EN_0
-
303 #define PINMUXOX_18 0x40 // Pinmux 18 G4_SOC_GPIO21_0
-
304 #define PINMUXOX_22 0x20 // Pinmux 22 G3_SOC_GPIO23_0
-
305 #define PINMUXOX_29 0x18 // Pinmux 29 AO_HV_CAN0_DIN_0
-
306 #define PINMUXOX_31 0x10 // Pinmux 31 AO_HV_CAN0_DOUT_0
-
307 #define PINMUXOX_32 0x40 // Pinmux 32 AO_HV_CAN1_STB_0
-
308 #define PINMUXOX_33 0X0 // Pinmux 33 AO_HV_CAN1_DOUT_0
-
309 #define PINMUXOX_37 0x8 // Pinmux 37 AO_HV_CAN1_DIN_0
-
310 
-
311 /* GPIO Cfg registers Orin AGX */
-
312 
-
313 #define CFGOX_7 0x74 // Config 7 G3_CFG2TMC_SOC_GPIO33_0
-
314 #define CFGOX_13 0x84 // Config 13 G3_CFG2TMC_SOC_GPIO37_0
-
315 #define CFGOX_16 0x4c // Config 16 AO_HV_CFG2TMC_CAN1_EN_0
-
316 #define CFGOX_18 0x44 // Config 18 G4_CFG2TMC_SOC_GPIO21_0
-
317 #define CFGOX_22 0x24 // Config 22 G3_CFG2TMC_SOC_GPIO23_0
-
318 #define CFGOX_29 0x1c // Config 29 AO_HV_CFG2TMC_CAN0_DIN_0
-
319 #define CFGOX_31 0x14 // Config 31 AO_HV_CFG2TMC_CAN0_DOUT_0
-
320 #define CFGOX_32 0x44 // Config 32 AO_HV_CFG2TMC_CAN1_STB_0
-
321 #define CFGOX_33 0x4 // Config 33 AO_HV_CFG2TMC_CAN1_DOUT_0
-
322 #define CFGOX_37 0xc // Config 37 AO_HV_CFG2TMC_CAN1_DIN_0
-
323 
-
324 /* Typical values Pinmux & Cfg registers Orin */
-
325 
-
326 #define CNFO_IN 0x00000001 // Typical for CNF register as input
-
327 #define CNFO_OUT 0x00000003 // Typical for CNF register as output
-
328 #define PINMUXO_IN 0x00000040 // Typical for pinmux register as input
-
329 #define PINMUXO_IN1 0x00000041
-
330 #define PINMUXO_OUT 0x00000040 // Typical for pinmux register as output
-
331 #define PINMUXO_OUT1 0x00000060 // Pinmux register as output for I2C pins
-
332 #define CFGO_IN 0x00000000 // Typical for config register as input
-
333 #define CFGO_OUT 0x01f1f000 // Typical for config register as output
-
334 
-
335 /* Define outputs get_chip_id */
-
336 
-
337 #define NANO 210
-
338 #define ORIN 234
-
339 #define ORINAGX 235
-
340 
-
341 /* Define typical input/output */
-
342 
-
343 #define JET_INPUT 0
-
344 #define JET_OUTPUT 1
-
345 
-
346 /* Define the typical interruption trigger */
-
347 
-
348 #define RISING_EDGE 1
-
349 #define FALLING_EDGE 2
-
350 #define EITHER_EDGE 3
-
351 
-
352 /* i2c definitions */
-
353 
-
354 #define I2C_CLOSED 0
-
355 #define I2C_RESERVED 1
-
356 #define I2C_OPENED 2
-
357 
-
358 /* SPI definitions */
-
359 
-
360 #define SPI_CLOSED 0
-
361 #define SPI_RESERVED 1
-
362 #define SPI_OPENED 2
-
363 
-
364 #ifdef __cplusplus
-
365 extern "C" {
-
366 #endif
-
367 
-
368 /* Variables */
-
369 
-
370 typedef struct {
-
371  uint32_t CNF[4];
-
372  uint32_t OE[4];
-
373  uint32_t OUT[4];
-
374  uint32_t IN[4];
-
375  uint32_t INT_STA[4];
-
376  uint32_t INT_ENB[4];
-
377  uint32_t INT_LVL[4];
-
378  uint32_t INT_CLR[4];
-
379 } GPIO_CNF;
-
380 
-
381 typedef struct {
-
382  uint32_t CNF[1];
-
383  uint32_t DEB[1];
-
384  uint32_t IN[1];
-
385  uint32_t OUT[1];
-
386  uint32_t OUT_VLE[1];
-
387  uint32_t INT_CLR[1];
-
388 } GPIO_CNFO;
-
389 
-
390 
-
391 typedef struct {
-
392  uint32_t pin3;
-
393  uint32_t pin5;
-
394  uint32_t pin7;
-
395  uint32_t pin8;
-
396  uint32_t pin10;
-
397  uint32_t pin11;
-
398  uint32_t pin12;
-
399  uint32_t pin13;
-
400  uint32_t pin15;
-
401  uint32_t pin16;
-
402  uint32_t pin18;
-
403  uint32_t pin19;
-
404  uint32_t pin21;
-
405  uint32_t pin22;
-
406  uint32_t pin23;
-
407  uint32_t pin24;
-
408  uint32_t pin26;
-
409  uint32_t pin27;
-
410  uint32_t pin28;
-
411  uint32_t pin29;
-
412  uint32_t pin31;
-
413  uint32_t pin32;
-
414  uint32_t pin33;
-
415  uint32_t pin35;
-
416  uint32_t pin36;
-
417  uint32_t pin37;
-
418  uint32_t pin38;
-
419  uint32_t pin40;
-
420 } GPIO_CNF_Init;
-
421 
-
422 typedef struct {
-
423  uint32_t stat_reg;
-
424  uint32_t gpio;
-
425  uint32_t edge;
-
426  uint32_t gpio_offset;
-
427  uint64_t *timestamp;
-
428  void (*f)();
-
429  uint32_t debounce;
-
430 } ISRFunc;
-
431 
-
432 typedef ISRFunc *PISRFunc;
-
433 
-
434 typedef struct {
-
435  uint32_t PWM_0[4];
-
436  uint32_t PWM_1[4];
-
437  uint32_t PWM_2[4];
-
438  uint32_t PWM_3[4];
-
439 } GPIO_PWM;
-
440 
-
441 typedef struct {
-
442  uint32_t state;
-
443  int32_t fd;
-
444  uint32_t addr;
-
445  uint32_t flags;
-
446  uint32_t funcs;
-
447 } i2cInfo_t;
-
448 
-
449 typedef struct {
-
450  uint32_t state;
-
451  int32_t fd;
-
452  uint32_t mode;
-
453  uint32_t speed;
-
454  uint32_t cs_delay;
-
455  uint32_t cs_change;
-
456  uint32_t bits_word;
-
457 } SPIInfo_t;
-
458 
-
459 /* Functions */
-
460 
-
461 int gpioInitialise(void);
-
478 void gpioTerminate(void);
-
488 int gpioSetMode(unsigned gpio, unsigned mode);
-
500 int gpioRead(unsigned gpio);
-
510 int gpioWrite(unsigned gpio, unsigned level);
-
521 int gpioSetISRFunc(unsigned gpio, unsigned edge, unsigned debounce, unsigned long *timestamp, void (*f)());
-
537 int gpioSetPWMfrequency(unsigned gpio, unsigned frequency);
-
547 int gpioPWM(unsigned gpio, unsigned dutycycle);
-
559 int i2cOpen(unsigned i2cBus, unsigned i2cFlags);
-
573 int i2cClose(unsigned handle);
-
582 int i2cWriteByteData(unsigned handle, unsigned i2cAddr, unsigned i2cReg, unsigned bVal);
-
595 int i2cReadByteData(unsigned handle, unsigned i2cAddr, unsigned i2cReg);
-
606 int i2cWriteWordData(unsigned handle, unsigned i2cAddr, unsigned i2cReg, unsigned wVal);
-
619 int i2cReadWordData(unsigned handle, unsigned i2cAddr, unsigned i2cReg);
-
630 int spiOpen(unsigned spiChan, unsigned speed, unsigned mode, unsigned cs_delay, unsigned bits_word, unsigned lsb_first, unsigned cs_change);
-
662 int spiClose(unsigned handle);
-
671 int spiXfer(unsigned handle, char *txBuf, char *rxBuf, unsigned len);
-
683 #ifdef __cplusplus
-
684 }
-
685 #endif
-
686 
-
687 #endif // jetgpio_h__
-
int gpioWrite(unsigned gpio, unsigned level)
Sets the GPIO level, on or off. Arduino style: digitalWrite.
Definition: nano.c:1521
-
int spiOpen(unsigned spiChan, unsigned speed, unsigned mode, unsigned cs_delay, unsigned bits_word, unsigned lsb_first, unsigned cs_change)
This function returns a handle for the SPI device on the channel. Data will be transferred at baud bi...
Definition: nano.c:2389
-
void gpioTerminate(void)
Terminates the library. This function restores the used registers to their previous state and release...
Definition: nano.c:701
-
int i2cReadWordData(unsigned handle, unsigned i2cAddr, unsigned i2cReg)
This reads two bytes from the specified consecutive register(s) of the device associated with handle.
Definition: nano.c:2344
-
int i2cWriteByteData(unsigned handle, unsigned i2cAddr, unsigned i2cReg, unsigned bVal)
This writes a single byte to the specified register of the device associated with handle.
Definition: nano.c:2199
-
int gpioRead(unsigned gpio)
Reads the GPIO level, on or off, 0 or 1. Arduino style: digitalRead. Wheter a pin has been set as inp...
Definition: nano.c:1424
-
int gpioInitialise(void)
Initialises the library. gpioInitialise must be called before using the other library functions,...
Definition: nano.c:185
-
int gpioPWM(unsigned gpio, unsigned dutycycle)
Starts PWM on the GPIO, dutycycle between 0 (off) and range (fully on). Arduino style: analogWrite.
Definition: nano.c:2048
-
int spiXfer(unsigned handle, char *txBuf, char *rxBuf, unsigned len)
This function transfers len bytes of data from txBuf to the SPI device associated with the handle....
Definition: nano.c:2569
-
int gpioSetPWMfrequency(unsigned gpio, unsigned frequency)
Sets the frequency in hertz to be used for the GPIO.
Definition: nano.c:2022
-
int i2cWriteWordData(unsigned handle, unsigned i2cAddr, unsigned i2cReg, unsigned wVal)
This writes two bytes to the specified consecutive register(s) of the device associated with handle.
Definition: nano.c:2294
-
int spiClose(unsigned handle)
This functions closes the SPI device identified by the handle.
Definition: nano.c:2547
-
int i2cClose(unsigned handle)
This closes the I2C device associated with the handle.
Definition: nano.c:2172
-
int i2cOpen(unsigned i2cBus, unsigned i2cFlags)
This returns a handle for the device at the address on the I2C bus.
Definition: nano.c:2091
-
int gpioSetMode(unsigned gpio, unsigned mode)
Sets the GPIO mode, typically input or output.
Definition: nano.c:1004
-
int gpioSetISRFunc(unsigned gpio, unsigned edge, unsigned debounce, unsigned long *timestamp, void(*f)())
Registers a function to be called (a callback) whenever the specified.
Definition: nano.c:1778
-
int i2cReadByteData(unsigned handle, unsigned i2cAddr, unsigned i2cReg)
This reads a single byte from the specified register of the device associated with handle.
Definition: nano.c:2249
-
-
- - - - diff --git a/github_bad/docs/html/jquery.js b/github_bad/docs/html/jquery.js deleted file mode 100644 index 103c32d..0000000 --- a/github_bad/docs/html/jquery.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element -},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** - * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler - * Licensed under MIT - * @author Ariel Flesler - * @version 2.1.2 - */ -;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 - * http://www.smartmenus.org/ - * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/github_bad/docs/html/menu.js b/github_bad/docs/html/menu.js deleted file mode 100644 index 2fe2214..0000000 --- a/github_bad/docs/html/menu.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file - */ -function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { - function makeTree(data,relPath) { - var result=''; - if ('children' in data) { - result+=''; - } - return result; - } - - $('#main-nav').append(makeTree(menudata,relPath)); - $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); - if (searchEnabled) { - if (serverSide) { - $('#main-menu').append('
  • '); - } else { - $('#main-menu').append('
  • '); - } - } - $('#main-menu').smartmenus(); -} -/* @license-end */ diff --git a/github_bad/docs/html/menudata.js b/github_bad/docs/html/menudata.js deleted file mode 100644 index dc8cecf..0000000 --- a/github_bad/docs/html/menudata.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file -*/ -var menudata={children:[ -{text:"Main Page",url:"index.html"}, -{text:"Functions",url:"./globals_func.html"}, -{text:"Files",url:"files.html",children:[ -{text:"File List",url:"files.html"}, -{text:"Globals",url:"globals.html",children:[ -{text:"All",url:"globals.html"}, -{text:"Functions",url:"globals_func.html"}]}]}]} diff --git a/github_bad/docs/html/nav_f.png b/github_bad/docs/html/nav_f.png deleted file mode 100644 index e080b61..0000000 Binary files a/github_bad/docs/html/nav_f.png and /dev/null differ diff --git a/github_bad/docs/html/nav_g.png b/github_bad/docs/html/nav_g.png deleted file mode 100644 index 2093a23..0000000 Binary files a/github_bad/docs/html/nav_g.png and /dev/null differ diff --git a/github_bad/docs/html/nav_h.png b/github_bad/docs/html/nav_h.png deleted file mode 100644 index 9d91886..0000000 Binary files a/github_bad/docs/html/nav_h.png and /dev/null differ diff --git a/github_bad/docs/html/navtree.css b/github_bad/docs/html/navtree.css deleted file mode 100644 index 48f466b..0000000 --- a/github_bad/docs/html/navtree.css +++ /dev/null @@ -1,146 +0,0 @@ -#nav-tree .children_ul { - margin:0; - padding:4px; -} - -#nav-tree ul { - list-style:none outside none; - margin:0px; - padding:0px; -} - -#nav-tree li { - white-space:nowrap; - margin:0px; - padding:0px; -} - -#nav-tree .plus { - margin:0px; -} - -#nav-tree .selected { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} - -#nav-tree img { - margin:0px; - padding:0px; - border:0px; - vertical-align: middle; -} - -#nav-tree a { - text-decoration:none; - padding:0px; - margin:0px; - outline:none; -} - -#nav-tree .label { - margin:0px; - padding:0px; - font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; -} - -#nav-tree .label a { - padding:2px; -} - -#nav-tree .selected a { - text-decoration:none; - color:#fff; -} - -#nav-tree .children_ul { - margin:0px; - padding:0px; -} - -#nav-tree .item { - margin:0px; - padding:0px; -} - -#nav-tree { - padding: 0px 0px; - background-color: #FAFAFF; - font-size:14px; - overflow:auto; -} - -#doc-content { - overflow:auto; - display:block; - padding:0px; - margin:0px; - -webkit-overflow-scrolling : touch; /* iOS 5+ */ -} - -#side-nav { - padding:0 6px 0 0; - margin: 0px; - display:block; - position: absolute; - left: 0px; - width: 250px; -} - -.ui-resizable .ui-resizable-handle { - display:block; -} - -.ui-resizable-e { - background-image:url("splitbar.png"); - background-size:100%; - background-repeat:repeat-y; - background-attachment: scroll; - cursor:ew-resize; - height:100%; - right:0; - top:0; - width:6px; -} - -.ui-resizable-handle { - display:none; - font-size:0.1px; - position:absolute; - z-index:1; -} - -#nav-tree-contents { - margin: 6px 0px 0px 0px; -} - -#nav-tree { - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F1F7F8; - -webkit-overflow-scrolling : touch; /* iOS 5+ */ -} - -#nav-sync { - position:absolute; - top:5px; - right:24px; - z-index:0; -} - -#nav-sync img { - opacity:0.3; -} - -#nav-sync img:hover { - opacity:0.9; -} - -@media print -{ - #nav-tree { display: none; } - div.ui-resizable-handle { display: none; position: relative; } -} - diff --git a/github_bad/docs/html/navtree.js b/github_bad/docs/html/navtree.js deleted file mode 100644 index 1e272d3..0000000 --- a/github_bad/docs/html/navtree.js +++ /dev/null @@ -1,546 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file - */ -var navTreeSubIndices = new Array(); -var arrowDown = '▼'; -var arrowRight = '►'; - -function getData(varName) -{ - var i = varName.lastIndexOf('/'); - var n = i>=0 ? varName.substring(i+1) : varName; - return eval(n.replace(/\-/g,'_')); -} - -function stripPath(uri) -{ - return uri.substring(uri.lastIndexOf('/')+1); -} - -function stripPath2(uri) -{ - var i = uri.lastIndexOf('/'); - var s = uri.substring(i+1); - var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); - return m ? uri.substring(i-6) : s; -} - -function hashValue() -{ - return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); -} - -function hashUrl() -{ - return '#'+hashValue(); -} - -function pathName() -{ - return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); -} - -function localStorageSupported() -{ - try { - return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; - } - catch(e) { - return false; - } -} - -function storeLink(link) -{ - if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { - window.localStorage.setItem('navpath',link); - } -} - -function deleteLink() -{ - if (localStorageSupported()) { - window.localStorage.setItem('navpath',''); - } -} - -function cachedLink() -{ - if (localStorageSupported()) { - return window.localStorage.getItem('navpath'); - } else { - return ''; - } -} - -function getScript(scriptName,func,show) -{ - var head = document.getElementsByTagName("head")[0]; - var script = document.createElement('script'); - script.id = scriptName; - script.type = 'text/javascript'; - script.onload = func; - script.src = scriptName+'.js'; - head.appendChild(script); -} - -function createIndent(o,domNode,node,level) -{ - var level=-1; - var n = node; - while (n.parentNode) { level++; n=n.parentNode; } - if (node.childrenData) { - var imgNode = document.createElement("span"); - imgNode.className = 'arrow'; - imgNode.style.paddingLeft=(16*level).toString()+'px'; - imgNode.innerHTML=arrowRight; - node.plus_img = imgNode; - node.expandToggle = document.createElement("a"); - node.expandToggle.href = "javascript:void(0)"; - node.expandToggle.onclick = function() { - if (node.expanded) { - $(node.getChildrenUL()).slideUp("fast"); - node.plus_img.innerHTML=arrowRight; - node.expanded = false; - } else { - expandNode(o, node, false, false); - } - } - node.expandToggle.appendChild(imgNode); - domNode.appendChild(node.expandToggle); - } else { - var span = document.createElement("span"); - span.className = 'arrow'; - span.style.width = 16*(level+1)+'px'; - span.innerHTML = ' '; - domNode.appendChild(span); - } -} - -var animationInProgress = false; - -function gotoAnchor(anchor,aname,updateLocation) -{ - var pos, docContent = $('#doc-content'); - var ancParent = $(anchor.parent()); - if (ancParent.hasClass('memItemLeft') || - ancParent.hasClass('memtitle') || - ancParent.hasClass('fieldname') || - ancParent.hasClass('fieldtype') || - ancParent.is(':header')) - { - pos = ancParent.position().top; - } else if (anchor.position()) { - pos = anchor.position().top; - } - if (pos) { - var dist = Math.abs(Math.min( - pos-docContent.offset().top, - docContent[0].scrollHeight- - docContent.height()-docContent.scrollTop())); - animationInProgress=true; - docContent.animate({ - scrollTop: pos + docContent.scrollTop() - docContent.offset().top - },Math.max(50,Math.min(500,dist)),function(){ - if (updateLocation) window.location.href=aname; - animationInProgress=false; - }); - } -} - -function newNode(o, po, text, link, childrenData, lastNode) -{ - var node = new Object(); - node.children = Array(); - node.childrenData = childrenData; - node.depth = po.depth + 1; - node.relpath = po.relpath; - node.isLast = lastNode; - - node.li = document.createElement("li"); - po.getChildrenUL().appendChild(node.li); - node.parentNode = po; - - node.itemDiv = document.createElement("div"); - node.itemDiv.className = "item"; - - node.labelSpan = document.createElement("span"); - node.labelSpan.className = "label"; - - createIndent(o,node.itemDiv,node,0); - node.itemDiv.appendChild(node.labelSpan); - node.li.appendChild(node.itemDiv); - - var a = document.createElement("a"); - node.labelSpan.appendChild(a); - node.label = document.createTextNode(text); - node.expanded = false; - a.appendChild(node.label); - if (link) { - var url; - if (link.substring(0,1)=='^') { - url = link.substring(1); - link = url; - } else { - url = node.relpath+link; - } - a.className = stripPath(link.replace('#',':')); - if (link.indexOf('#')!=-1) { - var aname = '#'+link.split('#')[1]; - var srcPage = stripPath(pathName()); - var targetPage = stripPath(link.split('#')[0]); - a.href = srcPage!=targetPage ? url : "javascript:void(0)"; - a.onclick = function(){ - storeLink(link); - if (!$(a).parent().parent().hasClass('selected')) - { - $('.item').removeClass('selected'); - $('.item').removeAttr('id'); - $(a).parent().parent().addClass('selected'); - $(a).parent().parent().attr('id','selected'); - } - var anchor = $(aname); - gotoAnchor(anchor,aname,true); - }; - } else { - a.href = url; - a.onclick = function() { storeLink(link); } - } - } else { - if (childrenData != null) - { - a.className = "nolink"; - a.href = "javascript:void(0)"; - a.onclick = node.expandToggle.onclick; - } - } - - node.childrenUL = null; - node.getChildrenUL = function() { - if (!node.childrenUL) { - node.childrenUL = document.createElement("ul"); - node.childrenUL.className = "children_ul"; - node.childrenUL.style.display = "none"; - node.li.appendChild(node.childrenUL); - } - return node.childrenUL; - }; - - return node; -} - -function showRoot() -{ - var headerHeight = $("#top").height(); - var footerHeight = $("#nav-path").height(); - var windowHeight = $(window).height() - headerHeight - footerHeight; - (function (){ // retry until we can scroll to the selected item - try { - var navtree=$('#nav-tree'); - navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); - } catch (err) { - setTimeout(arguments.callee, 0); - } - })(); -} - -function expandNode(o, node, imm, showRoot) -{ - if (node.childrenData && !node.expanded) { - if (typeof(node.childrenData)==='string') { - var varName = node.childrenData; - getScript(node.relpath+varName,function(){ - node.childrenData = getData(varName); - expandNode(o, node, imm, showRoot); - }, showRoot); - } else { - if (!node.childrenVisited) { - getNode(o, node); - } - $(node.getChildrenUL()).slideDown("fast"); - node.plus_img.innerHTML = arrowDown; - node.expanded = true; - } - } -} - -function glowEffect(n,duration) -{ - n.addClass('glow').delay(duration).queue(function(next){ - $(this).removeClass('glow');next(); - }); -} - -function highlightAnchor() -{ - var aname = hashUrl(); - var anchor = $(aname); - if (anchor.parent().attr('class')=='memItemLeft'){ - var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); - glowEffect(rows.children(),300); // member without details - } else if (anchor.parent().attr('class')=='fieldname'){ - glowEffect(anchor.parent().parent(),1000); // enum value - } else if (anchor.parent().attr('class')=='fieldtype'){ - glowEffect(anchor.parent().parent(),1000); // struct field - } else if (anchor.parent().is(":header")) { - glowEffect(anchor.parent(),1000); // section header - } else { - glowEffect(anchor.next(),1000); // normal member - } -} - -function selectAndHighlight(hash,n) -{ - var a; - if (hash) { - var link=stripPath(pathName())+':'+hash.substring(1); - a=$('.item a[class$="'+link+'"]'); - } - if (a && a.length) { - a.parent().parent().addClass('selected'); - a.parent().parent().attr('id','selected'); - highlightAnchor(); - } else if (n) { - $(n.itemDiv).addClass('selected'); - $(n.itemDiv).attr('id','selected'); - } - if ($('#nav-tree-contents .item:first').hasClass('selected')) { - $('#nav-sync').css('top','30px'); - } else { - $('#nav-sync').css('top','5px'); - } - showRoot(); -} - -function showNode(o, node, index, hash) -{ - if (node && node.childrenData) { - if (typeof(node.childrenData)==='string') { - var varName = node.childrenData; - getScript(node.relpath+varName,function(){ - node.childrenData = getData(varName); - showNode(o,node,index,hash); - },true); - } else { - if (!node.childrenVisited) { - getNode(o, node); - } - $(node.getChildrenUL()).css({'display':'block'}); - node.plus_img.innerHTML = arrowDown; - node.expanded = true; - var n = node.children[o.breadcrumbs[index]]; - if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); - else hash=''; - } - if (hash.match(/^#l\d+$/)) { - var anchor=$('a[name='+hash.substring(1)+']'); - glowEffect(anchor.parent(),1000); // line number - hash=''; // strip line number anchors - } - var url=root+hash; - var i=-1; - while (NAVTREEINDEX[i+1]<=url) i++; - if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index - if (navTreeSubIndices[i]) { - gotoNode(o,i,root,hash,relpath) - } else { - getScript(relpath+'navtreeindex'+i,function(){ - navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); - if (navTreeSubIndices[i]) { - gotoNode(o,i,root,hash,relpath); - } - },true); - } -} - -function showSyncOff(n,relpath) -{ - n.html(''); -} - -function showSyncOn(n,relpath) -{ - n.html(''); -} - -function toggleSyncButton(relpath) -{ - var navSync = $('#nav-sync'); - if (navSync.hasClass('sync')) { - navSync.removeClass('sync'); - showSyncOff(navSync,relpath); - storeLink(stripPath2(pathName())+hashUrl()); - } else { - navSync.addClass('sync'); - showSyncOn(navSync,relpath); - deleteLink(); - } -} - -var loadTriggered = false; -var readyTriggered = false; -var loadObject,loadToRoot,loadUrl,loadRelPath; - -$(window).on('load',function(){ - if (readyTriggered) { // ready first - navTo(loadObject,loadToRoot,loadUrl,loadRelPath); - showRoot(); - } - loadTriggered=true; -}); - -function initNavTree(toroot,relpath) -{ - var o = new Object(); - o.toroot = toroot; - o.node = new Object(); - o.node.li = document.getElementById("nav-tree-contents"); - o.node.childrenData = NAVTREE; - o.node.children = new Array(); - o.node.childrenUL = document.createElement("ul"); - o.node.getChildrenUL = function() { return o.node.childrenUL; }; - o.node.li.appendChild(o.node.childrenUL); - o.node.depth = 0; - o.node.relpath = relpath; - o.node.expanded = false; - o.node.isLast = true; - o.node.plus_img = document.createElement("span"); - o.node.plus_img.className = 'arrow'; - o.node.plus_img.innerHTML = arrowRight; - - if (localStorageSupported()) { - var navSync = $('#nav-sync'); - if (cachedLink()) { - showSyncOff(navSync,relpath); - navSync.removeClass('sync'); - } else { - showSyncOn(navSync,relpath); - } - navSync.click(function(){ toggleSyncButton(relpath); }); - } - - if (loadTriggered) { // load before ready - navTo(o,toroot,hashUrl(),relpath); - showRoot(); - } else { // ready before load - loadObject = o; - loadToRoot = toroot; - loadUrl = hashUrl(); - loadRelPath = relpath; - readyTriggered=true; - } - - $(window).bind('hashchange', function(){ - if (window.location.hash && window.location.hash.length>1){ - var a; - if ($(location).attr('hash')){ - var clslink=stripPath(pathName())+':'+hashValue(); - a=$('.item a[class$="'+clslink.replace(/=desktop_vp) { - if (!collapsed) { - collapseExpand(); - } - } else if (width>desktop_vp && collapsedWidth0) { - restoreWidth(0); - collapsed=true; - } - else { - var width = readCookie('width'); - if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } - collapsed=false; - } - } - - header = $("#top"); - sidenav = $("#side-nav"); - content = $("#doc-content"); - navtree = $("#nav-tree"); - footer = $("#nav-path"); - $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); - $(sidenav).resizable({ minWidth: 0 }); - $(window).resize(function() { resizeHeight(); }); - var device = navigator.userAgent.toLowerCase(); - var touch_device = device.match(/(iphone|ipod|ipad|android)/); - if (touch_device) { /* wider split bar for touch only devices */ - $(sidenav).css({ paddingRight:'20px' }); - $('.ui-resizable-e').css({ width:'20px' }); - $('#nav-sync').css({ right:'34px' }); - barWidth=20; - } - var width = readCookie('width'); - if (width) { restoreWidth(width); } else { resizeWidth(); } - resizeHeight(); - var url = location.href; - var i=url.indexOf("#"); - if (i>=0) window.location.hash=url.substr(i); - var _preventDefault = function(evt) { evt.preventDefault(); }; - $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); - $(".ui-resizable-handle").dblclick(collapseExpand); - $(window).on('load',resizeHeight); -} -/* @license-end */ diff --git a/github_bad/docs/html/search/all_0.html b/github_bad/docs/html/search/all_0.html deleted file mode 100644 index 1ec5b2d..0000000 --- a/github_bad/docs/html/search/all_0.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/github_bad/docs/html/search/all_0.js b/github_bad/docs/html/search/all_0.js deleted file mode 100644 index a839fbf..0000000 --- a/github_bad/docs/html/search/all_0.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['gpioinitialise_0',['gpioInitialise',['../jetgpio_8h.html#a80d84e5dd32fd8ec04cb0370eab0a5b0',1,'nano.c']]], - ['gpiopwm_1',['gpioPWM',['../jetgpio_8h.html#a81675c68b04f3c19be1f743eae7f2136',1,'nano.c']]], - ['gpioread_2',['gpioRead',['../jetgpio_8h.html#a754d22c52d797f32f02c86863496b0ec',1,'nano.c']]], - ['gpiosetisrfunc_3',['gpioSetISRFunc',['../jetgpio_8h.html#ac0fe13b9811377a2f2fec9921795fb8f',1,'nano.c']]], - ['gpiosetmode_4',['gpioSetMode',['../jetgpio_8h.html#ab343b74f5cb62baaaded18e4ff1ed939',1,'nano.c']]], - ['gpiosetpwmfrequency_5',['gpioSetPWMfrequency',['../jetgpio_8h.html#a982f8292ecf78abc5bdeeb330a2e0a05',1,'nano.c']]], - ['gpioterminate_6',['gpioTerminate',['../jetgpio_8h.html#a404d80a9a9292869c1a2b86f183b3774',1,'nano.c']]], - ['gpiowrite_7',['gpioWrite',['../jetgpio_8h.html#a15ec7e76572f925b9e206018fd5d22e9',1,'nano.c']]] -]; diff --git a/github_bad/docs/html/search/all_1.html b/github_bad/docs/html/search/all_1.html deleted file mode 100644 index 9f80e90..0000000 --- a/github_bad/docs/html/search/all_1.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/github_bad/docs/html/search/all_1.js b/github_bad/docs/html/search/all_1.js deleted file mode 100644 index 7752bb7..0000000 --- a/github_bad/docs/html/search/all_1.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['i2cclose_8',['i2cClose',['../jetgpio_8h.html#aac119696ea99a19576c6fe858bb8a031',1,'nano.c']]], - ['i2copen_9',['i2cOpen',['../jetgpio_8h.html#aaf4b600818f342b2723043fb9fd594c0',1,'nano.c']]], - ['i2creadbytedata_10',['i2cReadByteData',['../jetgpio_8h.html#ae76dd5363acd174d24526f54c665c629',1,'nano.c']]], - ['i2creadworddata_11',['i2cReadWordData',['../jetgpio_8h.html#a54bb3be857e985a527e91e55a1315c21',1,'nano.c']]], - ['i2cwritebytedata_12',['i2cWriteByteData',['../jetgpio_8h.html#a642db3078905bf982f784fb7b428bda4',1,'nano.c']]], - ['i2cwriteworddata_13',['i2cWriteWordData',['../jetgpio_8h.html#a9a4e911447c30f1c74727334668535e2',1,'nano.c']]] -]; diff --git a/github_bad/docs/html/search/all_2.html b/github_bad/docs/html/search/all_2.html deleted file mode 100644 index 02cfffc..0000000 --- a/github_bad/docs/html/search/all_2.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/github_bad/docs/html/search/all_2.js b/github_bad/docs/html/search/all_2.js deleted file mode 100644 index ec16313..0000000 --- a/github_bad/docs/html/search/all_2.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['jetgpio_20library_14',['JETGPIO library',['../index.html',1,'']]], - ['jetgpio_2eh_15',['jetgpio.h',['../jetgpio_8h.html',1,'']]] -]; diff --git a/github_bad/docs/html/search/all_3.html b/github_bad/docs/html/search/all_3.html deleted file mode 100644 index 39767b8..0000000 --- a/github_bad/docs/html/search/all_3.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/github_bad/docs/html/search/all_3.js b/github_bad/docs/html/search/all_3.js deleted file mode 100644 index b13e262..0000000 --- a/github_bad/docs/html/search/all_3.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['spiclose_16',['spiClose',['../jetgpio_8h.html#a9fb213bb27196cab00718d2fdfb33688',1,'nano.c']]], - ['spiopen_17',['spiOpen',['../jetgpio_8h.html#a2532ad45eb33d8d476c4d6036f694702',1,'nano.c']]], - ['spixfer_18',['spiXfer',['../jetgpio_8h.html#a96e92eb729c89f2a9a893adf83251dc8',1,'nano.c']]] -]; diff --git a/github_bad/docs/html/search/close.svg b/github_bad/docs/html/search/close.svg deleted file mode 100644 index a933eea..0000000 --- a/github_bad/docs/html/search/close.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - diff --git a/github_bad/docs/html/search/files_0.html b/github_bad/docs/html/search/files_0.html deleted file mode 100644 index 9498842..0000000 --- a/github_bad/docs/html/search/files_0.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/github_bad/docs/html/search/files_0.js b/github_bad/docs/html/search/files_0.js deleted file mode 100644 index 79927af..0000000 --- a/github_bad/docs/html/search/files_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['jetgpio_2eh_19',['jetgpio.h',['../jetgpio_8h.html',1,'']]] -]; diff --git a/github_bad/docs/html/search/functions_0.html b/github_bad/docs/html/search/functions_0.html deleted file mode 100644 index eb4c501..0000000 --- a/github_bad/docs/html/search/functions_0.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/github_bad/docs/html/search/functions_0.js b/github_bad/docs/html/search/functions_0.js deleted file mode 100644 index da74442..0000000 --- a/github_bad/docs/html/search/functions_0.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['gpioinitialise_20',['gpioInitialise',['../jetgpio_8h.html#a80d84e5dd32fd8ec04cb0370eab0a5b0',1,'nano.c']]], - ['gpiopwm_21',['gpioPWM',['../jetgpio_8h.html#a81675c68b04f3c19be1f743eae7f2136',1,'nano.c']]], - ['gpioread_22',['gpioRead',['../jetgpio_8h.html#a754d22c52d797f32f02c86863496b0ec',1,'nano.c']]], - ['gpiosetisrfunc_23',['gpioSetISRFunc',['../jetgpio_8h.html#ac0fe13b9811377a2f2fec9921795fb8f',1,'nano.c']]], - ['gpiosetmode_24',['gpioSetMode',['../jetgpio_8h.html#ab343b74f5cb62baaaded18e4ff1ed939',1,'nano.c']]], - ['gpiosetpwmfrequency_25',['gpioSetPWMfrequency',['../jetgpio_8h.html#a982f8292ecf78abc5bdeeb330a2e0a05',1,'nano.c']]], - ['gpioterminate_26',['gpioTerminate',['../jetgpio_8h.html#a404d80a9a9292869c1a2b86f183b3774',1,'nano.c']]], - ['gpiowrite_27',['gpioWrite',['../jetgpio_8h.html#a15ec7e76572f925b9e206018fd5d22e9',1,'nano.c']]] -]; diff --git a/github_bad/docs/html/search/functions_1.html b/github_bad/docs/html/search/functions_1.html deleted file mode 100644 index ef4088b..0000000 --- a/github_bad/docs/html/search/functions_1.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/github_bad/docs/html/search/functions_1.js b/github_bad/docs/html/search/functions_1.js deleted file mode 100644 index be4a224..0000000 --- a/github_bad/docs/html/search/functions_1.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['i2cclose_28',['i2cClose',['../jetgpio_8h.html#aac119696ea99a19576c6fe858bb8a031',1,'nano.c']]], - ['i2copen_29',['i2cOpen',['../jetgpio_8h.html#aaf4b600818f342b2723043fb9fd594c0',1,'nano.c']]], - ['i2creadbytedata_30',['i2cReadByteData',['../jetgpio_8h.html#ae76dd5363acd174d24526f54c665c629',1,'nano.c']]], - ['i2creadworddata_31',['i2cReadWordData',['../jetgpio_8h.html#a54bb3be857e985a527e91e55a1315c21',1,'nano.c']]], - ['i2cwritebytedata_32',['i2cWriteByteData',['../jetgpio_8h.html#a642db3078905bf982f784fb7b428bda4',1,'nano.c']]], - ['i2cwriteworddata_33',['i2cWriteWordData',['../jetgpio_8h.html#a9a4e911447c30f1c74727334668535e2',1,'nano.c']]] -]; diff --git a/github_bad/docs/html/search/functions_2.html b/github_bad/docs/html/search/functions_2.html deleted file mode 100644 index ca5aa10..0000000 --- a/github_bad/docs/html/search/functions_2.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/github_bad/docs/html/search/functions_2.js b/github_bad/docs/html/search/functions_2.js deleted file mode 100644 index 302bfe5..0000000 --- a/github_bad/docs/html/search/functions_2.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['spiclose_34',['spiClose',['../jetgpio_8h.html#a9fb213bb27196cab00718d2fdfb33688',1,'nano.c']]], - ['spiopen_35',['spiOpen',['../jetgpio_8h.html#a2532ad45eb33d8d476c4d6036f694702',1,'nano.c']]], - ['spixfer_36',['spiXfer',['../jetgpio_8h.html#a96e92eb729c89f2a9a893adf83251dc8',1,'nano.c']]] -]; diff --git a/github_bad/docs/html/search/mag_sel.svg b/github_bad/docs/html/search/mag_sel.svg deleted file mode 100644 index 03626f6..0000000 --- a/github_bad/docs/html/search/mag_sel.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/github_bad/docs/html/search/nomatches.html b/github_bad/docs/html/search/nomatches.html deleted file mode 100644 index 2b9360b..0000000 --- a/github_bad/docs/html/search/nomatches.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - -
    -
    No Matches
    -
    - - diff --git a/github_bad/docs/html/search/pages_0.html b/github_bad/docs/html/search/pages_0.html deleted file mode 100644 index 8517b48..0000000 --- a/github_bad/docs/html/search/pages_0.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/github_bad/docs/html/search/pages_0.js b/github_bad/docs/html/search/pages_0.js deleted file mode 100644 index 5f4af53..0000000 --- a/github_bad/docs/html/search/pages_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['jetgpio_20library_37',['JETGPIO library',['../index.html',1,'']]] -]; diff --git a/github_bad/docs/html/search/search.css b/github_bad/docs/html/search/search.css deleted file mode 100644 index 764e801..0000000 --- a/github_bad/docs/html/search/search.css +++ /dev/null @@ -1,257 +0,0 @@ -/*---------------- Search Box */ - -#MSearchBox { - white-space : nowrap; - background: white; - border-radius: 0.65em; - box-shadow: inset 0.5px 0.5px 3px 0px #555; - z-index: 102; -} - -#MSearchBox .left { - display: inline-block; - vertical-align: middle; - height: 1.4em; -} - -#MSearchSelect { - display: inline-block; - vertical-align: middle; - height: 1.4em; - padding: 0 0 0 0.3em; - margin: 0; -} - -#MSearchField { - display: inline-block; - vertical-align: middle; - width: 7.5em; - height: 1.1em; - margin: 0 0.15em; - padding: 0; - line-height: 1em; - border:none; - color: #909090; - outline: none; - font-family: Arial, Verdana, sans-serif; - -webkit-border-radius: 0px; - border-radius: 0px; - background: none; -} - - -#MSearchBox .right { - display: inline-block; - vertical-align: middle; - width: 1.4em; - height: 1.4em; -} - -#MSearchClose { - display: none; - font-size: inherit; - background : none; - border: none; - margin: 0; - padding: 0; - outline: none; - -} - -#MSearchCloseImg { - height: 1.4em; - padding: 0.3em; - margin: 0; -} - -.MSearchBoxActive #MSearchField { - color: #000000; -} - -#main-menu > li:last-child { - /* This
  • object is the parent of the search bar */ - display: flex; - justify-content: center; - align-items: center; - height: 36px; - margin-right: 1em; -} - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #3D788B; - background-color: #F1F7F8; - z-index: 10001; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt Arial, Verdana, sans-serif; - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: monospace; - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: #000000; - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: #000000; - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: #FFFFFF; - background-color: #0F1E22; - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - width: 60ex; - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000; - background-color: #D6E7ED; - z-index:10000; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; - padding-bottom: 15px; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -body.SRPage { - margin: 5px 2px; -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: #12242A; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: #12242A; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -span.SRScope { - padding-left: 4px; - font-family: Arial, Verdana, sans-serif; -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; - font-family: Arial, Verdana, sans-serif; -} - -.SRResult { - display: none; -} - -div.searchresults { - margin-left: 10px; - margin-right: 10px; -} - -/*---------------- External search page results */ - -.searchresult { - background-color: #DBEAEF; -} - -.pages b { - color: white; - padding: 5px 5px 3px 5px; - background-image: url("../tab_a.png"); - background-repeat: repeat-x; - text-shadow: 0 1px 1px #000000; -} - -.pages { - line-height: 17px; - margin-left: 4px; - text-decoration: none; -} - -.hl { - font-weight: bold; -} - -#searchresults { - margin-bottom: 20px; -} - -.searchpages { - margin-top: 10px; -} - diff --git a/github_bad/docs/html/search/search.js b/github_bad/docs/html/search/search.js deleted file mode 100644 index fb226f7..0000000 --- a/github_bad/docs/html/search/search.js +++ /dev/null @@ -1,816 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file - */ -function convertToId(search) -{ - var result = ''; - for (i=0;i do a search - { - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() - { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() - { - this.keyTimeout = 0; - - // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { - idxChar = searchValue.substr(0, 2); - } - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches' + this.extension; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - } - - window.frames.MSearchResults.location = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline-block'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } - } - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) - { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { - this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') - { - return element; - } - - if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) - { - element = element.firstChild; - } - else if (element.nextSibling) - { - element = element.nextSibling; - } - else - { - do - { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; - } - else - { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; - } - } - } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } -} - -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} - -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} - -function createResults() -{ - var results = document.getElementById("SRResults"); - for (var e=0; eli>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/github_bad/docs/index.html b/github_bad/docs/index.html deleted file mode 100644 index 937f60a..0000000 --- a/github_bad/docs/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/github_bad/docs/jetgpio.dox b/github_bad/docs/jetgpio.dox deleted file mode 100644 index 377857b..0000000 --- a/github_bad/docs/jetgpio.dox +++ /dev/null @@ -1,2844 +0,0 @@ -# Doxyfile 1.10.0 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). -# -# Note: -# -# Use doxygen to compare the used configuration file with the template -# configuration file: -# doxygen -x [configFile] -# Use doxygen to compare the used configuration file with the template -# configuration file without replacing the environment variables or CMake type -# replacement variables: -# doxygen -x_noenv [configFile] - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the configuration -# file that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# https://www.gnu.org/software/libiconv/ for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = Jetgpio - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = 1.2 - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = "C library to manage the GPIO header of the Nvidia JETSON boards" - -# With the PROJECT_LOGO tag one can specify a logo or an icon that is included -# in the documentation. The maximum height of the logo should not exceed 55 -# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy -# the logo to the output directory. - -PROJECT_LOGO = - -# With the PROJECT_ICON tag one can specify an icon that is included in the tabs -# when the HTML document is shown. Doxygen will copy the logo to the output -# directory. - -PROJECT_ICON = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 -# sub-directories (in 2 levels) under the output directory of each output format -# and will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to -# control the number of sub-directories. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# Controls the number of sub-directories that will be created when -# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every -# level increment doubles the number of directories, resulting in 4096 -# directories at level 8 which is the default and also the maximum value. The -# sub-directories are organized in 2 levels, the first level always has a fixed -# number of 16 directories. -# Minimum value: 0, maximum value: 8, default value: 8. -# This tag requires that the tag CREATE_SUBDIRS is set to YES. - -CREATE_SUBDIRS_LEVEL = 8 - -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII -# characters to appear in the names of generated files. If set to NO, non-ASCII -# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode -# U+3044. -# The default value is: NO. - -ALLOW_UNICODE_NAMES = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, -# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English -# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, -# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with -# English messages), Korean, Korean-en (Korean with English messages), Latvian, -# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, -# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, -# Swedish, Turkish, Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = NO - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = NO - -# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line -# such as -# /*************** -# as being the beginning of a Javadoc-style comment "banner". If set to NO, the -# Javadoc-style will behave just like regular comments and it will not be -# interpreted by doxygen. -# The default value is: NO. - -JAVADOC_BANNER = NO - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# By default Python docstrings are displayed as preformatted text and doxygen's -# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the -# doxygen's special commands can be used and the contents of the docstring -# documentation blocks is shown as doxygen documentation. -# The default value is: YES. - -PYTHON_DOCSTRING = YES - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new -# page for each member. If set to NO, the documentation of a member will be part -# of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:^^" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". Note that you cannot put \n's in the value part of an alias -# to insert newlines (in the resulting output). You can put ^^ in the value part -# of an alias to insert a newline as if a physical newline was in the original -# file. When you need a literal { or } or , in the value part of an alias you -# have to escape them by means of a backslash (\), this can lead to conflicts -# with the commands \{ and \} for these it is advised to use the version @{ and -# @} or use a double escape (\\{ and \\}) - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice -# sources only. Doxygen will then generate output that is more tailored for that -# language. For instance, namespaces will be presented as modules, types will be -# separated into more groups, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_SLICE = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, -# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, -# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: -# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser -# tries to guess whether the code is fixed or free formatted code, this is the -# default for Fortran type files). For instance to make doxygen treat .inc files -# as Fortran files (default is PHP), and .f files as C (default is Fortran), -# use: inc=Fortran f=C. -# -# Note: For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. When specifying no_extension you should add -# * to the FILE_PATTERNS. -# -# Note see also the list of default file extension mappings. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See https://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up -# to that level are automatically included in the table of contents, even if -# they do not have an id attribute. -# Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 5. -# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. - -TOC_INCLUDE_HEADINGS = 0 - -# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to -# generate identifiers for the Markdown headings. Note: Every identifier is -# unique. -# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a -# sequence number starting at 0 and GITHUB use the lower case version of title -# with any whitespace replaced by '-' and punctuation characters removed. -# The default value is: DOXYGEN. -# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. - -MARKDOWN_ID_STYLE = DOXYGEN - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# If one adds a struct or class to a group and this option is enabled, then also -# any nested class or struct is added to the same group. By default this option -# is disabled and one has to add nested compounds explicitly via \ingroup. -# The default value is: NO. - -GROUP_NESTED_COMPOUNDS = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use -# during processing. When set to 0 doxygen will based this on the number of -# cores available in the system. You can set it explicitly to a value larger -# than 0 to get more control over the balance between CPU load and processing -# speed. At this moment only the input processing can be done using multiple -# threads. Since this is still an experimental feature the default is set to 1, -# which effectively disables parallel processing. Please report any issues you -# encounter. Generating dot graphs in parallel is controlled by the -# DOT_NUM_THREADS setting. -# Minimum value: 0, maximum value: 32, default value: 1. - -NUM_PROC_THREADS = 1 - -# If the TIMESTAMP tag is set different from NO then each generated page will -# contain the date or date and time when the page was generated. Setting this to -# NO can help when comparing the output of multiple runs. -# Possible values are: YES, NO, DATETIME and DATE. -# The default value is: NO. - -TIMESTAMP = NO - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual -# methods of a class will be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIV_VIRTUAL = NO - -# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO, -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. If set to YES, local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO, only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If this flag is set to YES, the name of an unnamed parameter in a declaration -# will be determined by the corresponding definition. By default unnamed -# parameters remain unnamed in the output. -# The default value is: YES. - -RESOLVE_UNNAMED_PARAMS = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = YES - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO, these classes will be included in the various overviews. This option -# will also hide undocumented C++ concepts if enabled. This option has no effect -# if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = YES - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# declarations. If set to NO, these declarations will be included in the -# documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO, these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# With the correct setting of option CASE_SENSE_NAMES doxygen will better be -# able to match the capabilities of the underlying filesystem. In case the -# filesystem is case sensitive (i.e. it supports files in the same directory -# whose names only differ in casing), the option must be set to YES to properly -# deal with such files in case they appear in the input. For filesystems that -# are not case sensitive the option should be set to NO to properly deal with -# output files written for symbols that only differ in casing, such as for two -# classes, one named CLASS and the other named Class, and to also support -# references to files without having to specify the exact matching casing. On -# Windows (including Cygwin) and MacOS, users should typically set this option -# to NO, whereas on Linux or other Unix flavors it should typically be set to -# YES. -# Possible values are: SYSTEM, NO and YES. -# The default value is: SYSTEM. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES, the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will -# append additional text to a page's title, such as Class Reference. If set to -# YES the compound reference will be hidden. -# The default value is: NO. - -HIDE_COMPOUND_REFERENCE= NO - -# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class -# will show which file needs to be included to use the class. -# The default value is: YES. - -SHOW_HEADERFILE = YES - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo -# list. This list is created by putting \todo commands in the documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test -# list. This list is created by putting \test commands in the documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if ... \endif and \cond -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES, the -# list will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. See also section "Changing the -# layout of pages" for information. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. See also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as documenting some parameters in -# a documented function twice, or documenting parameters that don't exist or -# using markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete -# function parameter documentation. If set to NO, doxygen will accept that some -# parameters have no documentation without warning. -# The default value is: YES. - -WARN_IF_INCOMPLETE_DOC = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong parameter -# documentation, but not about the absence of documentation. If EXTRACT_ALL is -# set to YES then this flag will automatically be disabled. See also -# WARN_IF_INCOMPLETE_DOC -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about -# undocumented enumeration values. If set to NO, doxygen will accept -# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: NO. - -WARN_IF_UNDOC_ENUM_VAL = NO - -# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS -# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but -# at the end of the doxygen process doxygen will return with a non-zero status. -# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves -# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not -# write the warning messages in between other messages but write them at the end -# of a run, in case a WARN_LOGFILE is defined the warning messages will be -# besides being in the defined file also be shown at the end of a run, unless -# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case -# the behavior will remain as with the setting FAIL_ON_WARNINGS. -# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. -# The default value is: NO. - -WARN_AS_ERROR = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# See also: WARN_LINE_FORMAT -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# In the $text part of the WARN_FORMAT command it is possible that a reference -# to a more specific place is given. To make it easier to jump to this place -# (outside of doxygen) the user can define a custom "cut" / "paste" string. -# Example: -# WARN_LINE_FORMAT = "'vi $file +$line'" -# See also: WARN_FORMAT -# The default value is: at line $line of file $file. - -WARN_LINE_FORMAT = "at line $line of file $file" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). In case the file specified cannot be opened for writing the -# warning and error messages are written to standard error. When as file - is -# specified the warning and error messages are written to standard output -# (stdout). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING -# Note: If this tag is empty the current directory is searched. - -INPUT = ../ - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: -# https://www.gnu.org/software/libiconv/) for the list of possible encodings. -# See also: INPUT_FILE_ENCODING -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify -# character encoding on a per file pattern basis. Doxygen will compare the file -# name with each pattern and apply the encoding instead of the default -# INPUT_ENCODING) if there is a match. The character encodings are a list of the -# form: pattern=encoding (like *.php=ISO-8859-1). See cfg_input_encoding -# "INPUT_ENCODING" for further information on supported encodings. - -INPUT_FILE_ENCODING = - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# read by doxygen. -# -# Note the list of default checked file patterns might differ from the list of -# default file extension mappings. -# -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, -# *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, -# *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, -# *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to -# be provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. - -FILE_PATTERNS = *.c \ - *.cc \ - *.cxx \ - *.cpp \ - *.c++ \ - *.java \ - *.ii \ - *.ixx \ - *.ipp \ - *.i++ \ - *.inl \ - *.idl \ - *.ddl \ - *.odl \ - *.h \ - *.hh \ - *.hxx \ - *.hpp \ - *.h++ \ - *.cs \ - *.d \ - *.php \ - *.php4 \ - *.php5 \ - *.phtml \ - *.inc \ - *.m \ - *.markdown \ - *.md \ - *.mm \ - *.dox \ - *.py \ - *.pyw \ - *.f90 \ - *.f95 \ - *.f03 \ - *.f08 \ - *.f \ - *.for \ - *.tcl \ - *.vhd \ - *.vhdl \ - *.ucf \ - *.qsf - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# ANamespace::AClass, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# -# -# where is the value of the INPUT_FILTER tag, and is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. -# -# Note that doxygen will use the data processed and written to standard output -# for further processing, therefore nothing else, like debug statements or used -# commands (so in case of a Windows batch file always use @echo OFF), should be -# written to standard output. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = README.md - -# The Fortran standard specifies that for fixed formatted Fortran code all -# characters from position 72 are to be considered as comment. A common -# extension is to allow longer lines before the automatic comment starts. The -# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can -# be processed before the automatic comment starts. -# Minimum value: 7, maximum value: 10000, default value: 72. - -FORTRAN_COMMENT_AFTER = 72 - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# multi-line macros, enums or list initialized variables directly into the -# documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# entity all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see https://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) -# that should be ignored while generating the index headers. The IGNORE_PREFIX -# tag works for classes, function and member names. The entity will be placed in -# the alphabetical list under the first letter of the entity name that remains -# after removing the prefix. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefore more robust against future updates. -# Doxygen will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). -# Note: Since the styling of scrollbars can currently not be overruled in -# Webkit/Chromium, the styling will be left out of the default doxygen.css if -# one or more extra stylesheets have been specified. So if scrollbar -# customization is desired it has to be added explicitly. For an example see the -# documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output -# should be rendered with a dark or light theme. -# Possible values are: LIGHT always generate light mode output, DARK always -# generate dark mode output, AUTO_LIGHT automatically set the mode according to -# the user preference, use light mode if no preference is set (the default), -# AUTO_DARK automatically set the mode according to the user preference, use -# dark mode if no preference is set and TOGGLE allow to user to switch between -# light and dark mode via a button. -# The default value is: AUTO_LIGHT. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE = DARK - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a color-wheel, see -# https://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 195 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use gray-scales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 200 - -# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML -# documentation will contain a main index with vertical navigation menus that -# are dynamically created via JavaScript. If disabled, the navigation index will -# consists of multiple levels of tabs that are statically embedded in every HTML -# page. Disable this option to support browsers that do not have JavaScript, -# like the Qt help browser. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_MENUS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = NO - -# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be -# dynamically folded and expanded in the generated HTML source code. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_CODE_FOLDING = YES - -# If the HTML_COPY_CLIPBOARD tag is set to YES then doxygen will show an icon in -# the top right corner of code and text fragments that allows the user to copy -# its content to the clipboard (provided this is supported by the browser). -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COPY_CLIPBOARD = YES - -# Doxygen stores a couple of settings persistently in the browser (via e.g. -# cookies). By default these settings apply to all HTML pages generated by -# doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store -# the settings under a project specific key, such that the user preferences will -# be stored separately. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_PROJECT_COOKIE = - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: -# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To -# create a documentation set, doxygen will generate a Makefile in the HTML -# output directory. Running make will produce the docset in that directory and -# running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy -# genXcode/_index.html for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag determines the URL of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDURL = - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# on Windows. In the beginning of 2021 Microsoft took the original page, with -# a.o. the download links, offline the HTML help workshop was already many years -# in maintenance mode). You can download the HTML help workshop from the web -# archives at Installation executable (see: -# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo -# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the main .chm file (NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated -# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# The SITEMAP_URL tag is used to specify the full URL of the place where the -# generated documentation will be placed on the server by the user during the -# deployment of the documentation. The generated sitemap is called sitemap.xml -# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL -# is specified no sitemap is generated. For information about the sitemap -# protocol see https://www.sitemaps.org -# This tag requires that the tag GENERATE_HTML is set to YES. - -SITEMAP_URL = - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location (absolute path -# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to -# run qhelpgenerator on the generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine tune the look of the index (see "Fine-tuning the output"). As an -# example, the default style sheet generated by doxygen has an example that -# shows how to put an image at the root of the tree instead of the PROJECT_NAME. -# Since the tree basically has the same information as the tab index, you could -# consider setting DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = YES - -# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the -# FULL_SIDEBAR option determines if the side bar is limited to only the treeview -# area (value NO) or if it should extend to the full height of the window (value -# YES). Setting this to YES gives a layout similar to -# https://docs.readthedocs.io with more room for contents, but less room for the -# project logo, title, and description. If either GENERATE_TREEVIEW or -# DISABLE_INDEX is set to NO, this option has no effect. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FULL_SIDEBAR = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# If the OBFUSCATE_EMAILS tag is set to YES, doxygen will obfuscate email -# addresses. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -OBFUSCATE_EMAILS = YES - -# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg -# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see -# https://inkscape.org) to generate formulas as SVG images instead of PNGs for -# the HTML output. These images will generally look nicer at scaled resolutions. -# Possible values are: png (the default) and svg (looks nicer but requires the -# pdf2svg or inkscape tool). -# The default value is: png. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FORMULA_FORMAT = png - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands -# to create new LaTeX commands to be used in formulas as building blocks. See -# the section "Including formulas" for details. - -FORMULA_MACROFILE = - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# https://www.mathjax.org) which uses client side JavaScript for the rendering -# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. -# Note that the different versions of MathJax have different requirements with -# regards to the different settings, so it is possible that also other MathJax -# settings have to be changed when switching between the different MathJax -# versions. -# Possible values are: MathJax_2 and MathJax_3. -# The default value is: MathJax_2. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_VERSION = MathJax_2 - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. For more details about the output format see MathJax -# version 2 (see: -# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 -# (see: -# http://docs.mathjax.org/en/latest/web/components/output.html). -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility. This is the name for Mathjax version 2, for MathJax version 3 -# this will be translated into chtml), NativeMML (i.e. MathML. Only supported -# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This -# is the name for Mathjax version 3, for MathJax version 2 this will be -# translated into HTML-CSS) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from https://www.mathjax.org before deployment. The default value is: -# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 -# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# for MathJax version 2 (see -# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# For example for MathJax version 3 (see -# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): -# MATHJAX_EXTENSIONS = ams -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: -# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use + S -# (what the is depends on the OS and browser, but it is typically -# , /