1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-03-09 15:40:03 +00:00
openmptcprouter-feeds/luci-app-ouad/src/Example_Code/Main.c
2023-07-12 02:16:51 +08:00

238 lines
6.1 KiB
C
Executable file

/*
* Main.c
*
* Created on : Sep 6, 2017
* Author : Vinay Divakar
* Description : Example usage of the SSD1306 Driver API's
* Website : www.deeplyembedded.org
*/
/* Lib Includes */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
/* Header Files */
#include "I2C.h"
#include "SSD1306_OLED.h"
#include "example_app.h"
/* Oh Compiler-Please leave me as is */
volatile unsigned char flag = 0;
/* Alarm Signal Handler */
void ALARMhandler(int sig)
{
/* Set flag */
flag = 5;
}
void BreakDeal(int sig)
{
clearDisplay();
usleep(1000000);
Display();
exit(0);
}
int main(int argc, char* argv[])
{
int date=atoi(argv[1]);
int lanip=atoi(argv[2]);
int cputemp=atoi(argv[3]);
int cpufreq=atoi(argv[4]);
int netspeed=atoi(argv[5]);
int time=atoi(argv[6]);
int drawline=atoi(argv[7]);
int drawrect=atoi(argv[8]);
int fillrect=atoi(argv[9]);
int drawcircle=atoi(argv[10]);
int drawroundcircle=atoi(argv[11]);
int fillroundcircle=atoi(argv[12]);
int drawtriangle=atoi(argv[13]);
int filltriangle=atoi(argv[14]);
int displaybitmap=atoi(argv[15]);
int displayinvertnormal=atoi(argv[16]);
int drawbitmapeg=atoi(argv[17]);
int scroll=atoi(argv[18]);
char *text=argv[19];
char *eth=argv[20];
char *path=argv[21];
int rotate=atoi(argv[22]);
int needinit=atoi(argv[23]);
if(path == NULL)
path = I2C_DEV0_PATH;
/* Initialize I2C bus and connect to the I2C Device */
if(init_i2c_dev(path, SSD1306_OLED_ADDR) == 0)
{
printf("I2C: Bus Connected to SSD1306\r\n");
}
else
{
printf("I2C: OOPS! Something Went Wrong\r\n");
exit(1);
}
/* Register the Alarm Handler */
signal(SIGALRM, ALARMhandler);
signal(SIGINT, BreakDeal);
//signal(SIGTERM, BreakDeal);
/* Run SDD1306 Initialization Sequence */
if (needinit==1)
display_Init_seq();
if (rotate==1)
display_rotate();
else
display_normal();
/* Clear display */
clearDisplay();
// draw a single pixel
// drawPixel(0, 1, WHITE);
// Display();
// usleep(1000000);
// clearDisplay();
// draw many lines
while(1){
if(scroll){
testscrolltext(text);
usleep(1000000);
clearDisplay();
}
if(drawline){
testdrawline();
usleep(1000000);
clearDisplay();
}
// draw rectangles
if(drawrect){
testdrawrect();
usleep(1000000);
clearDisplay();
}
// draw multiple rectangles
if(fillrect){
testfillrect();
usleep(1000000);
clearDisplay();
}
// draw mulitple circles
if(drawcircle){
testdrawcircle();
usleep(1000000);
clearDisplay();
}
// draw a white circle, 10 pixel radius
if(drawroundcircle){
testdrawroundrect();
usleep(1000000);
clearDisplay();
}
// Fill the round rectangle
if(fillroundcircle){
testfillroundrect();
usleep(1000000);
clearDisplay();
}
// Draw triangles
if(drawtriangle){
testdrawtriangle();
usleep(1000000);
clearDisplay();
}
// Fill triangles
if(filltriangle){
testfilltriangle();
usleep(1000000);
clearDisplay();
}
// Display miniature bitmap
if(displaybitmap){
display_bitmap();
Display();
usleep(1000000);
};
// Display Inverted image and normalize it back
if(displayinvertnormal){
display_invert_normal();
clearDisplay();
usleep(1000000);
Display();
}
// Generate Signal after 20 Seconds
// draw a bitmap icon and 'animate' movement
if(drawbitmapeg){
alarm(10);
flag=0;
testdrawbitmap_eg();
clearDisplay();
usleep(1000000);
Display();
}
//setCursor(0,0);
setTextColor(WHITE);
// info display
int sum = date+lanip+cpufreq+cputemp+netspeed;
if (sum == 0) {
clearDisplay();
return 0;
}
for(int i = 1; i < time; i++){
if (sum == 1){//only one item for display
if (date) testdate(CENTER, 8);
if (lanip) testlanip(CENTER, 8);
if (cpufreq) testcpufreq(CENTER, 8);
if (cputemp) testcputemp(CENTER, 8);
if (netspeed) testnetspeed(SPLIT,0);
Display();
usleep(1000000);
clearDisplay();
}else if (sum == 2){//two items for display
if(date) {testdate(CENTER, 16*(date-1));}
if(lanip) {testlanip(CENTER, 16*(date+lanip-1));}
if(cpufreq) {testcpufreq(CENTER, 16*(date+lanip+cpufreq-1));}
if(cputemp) {testcputemp(CENTER, 16*(date+lanip+cpufreq+cputemp-1));}
if(netspeed) {testnetspeed(MERGE, 16*(date+lanip+cpufreq+cputemp+netspeed-1));}
Display();
usleep(1000000);
clearDisplay();
}else{//more than two items for display
if(date) {testdate(FULL, 8*(date-1));}
if(lanip) {testlanip(FULL, 8*(date+lanip-1));}
if(cpufreq && cputemp) {
testcpu(8*(date+lanip));
if(netspeed) {testnetspeed(FULL, 8*(date+lanip+1+netspeed-1));}
}else{
if(cpufreq) {testcpufreq(FULL, 8*(date+lanip+cpufreq-1));}
if(cputemp) {testcputemp(FULL, 8*(date+lanip+cpufreq+cputemp-1));}
if(netspeed) {testnetspeed(FULL, 8*(date+lanip+cpufreq+cputemp+netspeed-1));}
}
Display();
usleep(1000000);
clearDisplay();
}
}
}
}