Example #1
0
s32 main(s32 argc, const char* argv[]){

	padData paddata;
	padInfo padinfo;
	movePadData data;

	ioPadInit(7);
	int move = initLibMove();
	
	NoRSX *GFX = new NoRSX(RESOLUTION_AUTO, RESOLUTION_1920x1080); // RESOLUTION_720x480 | RESOLUTION_720x576 | RESOLUTION_1280x720 | RESOLUTION_1920x1080
	Bitmap BMap(GFX);
	Object OBJ (GFX);
	Image  IMG (GFX);
	MsgDialog Msg(GFX);


	
	bool write = false;
	bool usb_found = false;
	bool c_show =false;

	u16 CalibX, CalibY;
	s32 fd;
	u32 frame=1;
	u64 sec, nsec;
	u64 time_on = 0;

	time_t starttime = 0;	

	char path[256];
	char data_char[1024];
	char my_time[128];
	double fps = 1;
	
	short square = 4;
	int usb_num = 0;
	int my_data = 0;
	int  t_show=4, n_pressed=0;
	float S_X_HALF = 512.f, S_Y_HALF = 455.f, S_Z_HALF = 494.f, S_G_HALF = 512.f;
	float S_X=0, S_Y=0, S_Z=0, S_G=0;
	float Max_X=0, Max_Y=0, Max_Z=0, Max_G=0;

	fstream write_data;
	
	
	for(usb_num=0;usb_num<10;usb_num++){
		sprintf(path,"/dev_usb%03d/",usb_num);
		if(sysLv2FsOpenDir(path,&fd) == 0){
			usb_found = true;
			goto close_dir;
		}
	}
	close_dir:


	NoRSX_Bitmap Precalculated_Layer;	
	NoRSX_Bitmap Precalculated_Layer2;
	pngData *png = new pngData;
	
	BMap.GenerateBitmap(&Precalculated_Layer);
	BMap.GenerateBitmap(&Precalculated_Layer2);
	
	Font F2(visitor_ttf, visitor_ttf_size, GFX);

	IMG.LoadPNG_Buf((void*)BackGround_png, BackGround_png_size, png);
	
	IMG.DrawIMGtoBitmap(0, 0, png, &Precalculated_Layer);
	IMG.DrawIMGtoBitmap(0, 0, png, &Precalculated_Layer2);
	free(png);
	png = new pngData;
	if(move == LIBMOVE_OK)
		IMG.LoadPNG_Buf((void*)buttons_plus_move_png, buttons_plus_move_png_size, png);
	else
		IMG.LoadPNG_Buf((void*)buttons_png, buttons_png_size, png);
	IMG.AlphaDrawIMGtoBitmap(200, 160, png, &Precalculated_Layer);
	free(png);
	png = new pngData;

	F2.PrintfToBitmap(200,130,&Precalculated_Layer,COLOR_ORANGE,"PS STRONG-MOTION SEISMOMETER  USB %s", (usb_found) ? "FOUND" : "NOT FOUND");

	IMG.LoadPNG_Buf((void*)warning_png, warning_png_size, png);
	CalibX = (GFX->width - png->width)/2;
	CalibY = (GFX->height - png->height)/2;
	
	IMG.DrawIMGtoBitmap(CalibX, CalibY, png, &Precalculated_Layer2);

	free(png);
	png = new pngData;
	if(move == LIBMOVE_OK)
		IMG.LoadPNG_Buf((void*)calibrate_png, calibrate_png_size, png);
	else
		IMG.LoadPNG_Buf((void*)controller_options_png, controller_options_png_size, png);
	
	ioPadSetSensorMode(0,1);
	
	GFX->AppStart();
	
	u32 pixel[400][4];
	for(u32 k=0;k<400;k++){
		pixel[k][0] = 454;
		pixel[k][1] = 574;
		pixel[k][2] = 688;
		pixel[k][3] = 814;
	}
	
	Msg.TimerDialog(MSG_OK, "PS Seismograph\n"
	                        "Written By Deroad\n\n"
	                        "http://devram0.blogspot.com/", 5000.f); // 5 secs
	
	if(move == LIBMOVE_OK){
		starttime = time(NULL);
		while(1){
			BMap.DrawBitmap(&Precalculated_Layer2);
			IMG.DrawIMG(CalibX,CalibY,png);
			getMovePadData(PLAYSTATION_MOVE_PAD_0, &data);
			
			if(data.BTN_ACTION && n_pressed>13){
				n_pressed=0;
				goto move_init;
			}			
			if(data.BTN_CROSS && n_pressed>13){
				n_pressed=0;
				goto move_init;
			}
			ioPadGetInfo(&padinfo);
			if(padinfo.status[0]){
				ioPadGetData(0, &paddata);
				if(paddata.BTN_CROSS && n_pressed>13){
					n_pressed=0;
				goto move_init;
				}
			}
			if(n_pressed<14)
				n_pressed++;
			GFX->RescaleFlip();
			time_on = difftime (time (NULL), starttime);
			fps = frame / ((time_on==0) ? 1:time_on);
			
			if(GFX->ExitSignalStatus()) goto end_all;
			
		}
	move_init:
		calibrateMove(PLAYSTATION_MOVE_PAD_0);
		getGyroPosition(PLAYSTATION_MOVE_PAD_0, &S_X_HALF, &S_Y_HALF, &S_Z_HALF);
		sleep(1);
		starttime = time(NULL);
		frame = 0;
		t_show = 3;
		square = 3;
		while(GFX->GetAppStatus()){
			if(GFX->ExitSignalStatus()) goto end_all;
			sysGetCurrentTime(&sec,&nsec);
			BMap.DrawBitmap(&Precalculated_Layer2);
			BMap.DrawBitmap(&Precalculated_Layer);
			
			getMovePadData(PLAYSTATION_MOVE_PAD_0, &data);
			ioPadGetInfo(&padinfo);
			if(padinfo.status[0]){
				ioPadGetData(0, &paddata);
				if(paddata.BTN_CROSS && n_pressed>13){
					GFX->AppExit();
				}
				
				if(paddata.BTN_TRIANGLE && n_pressed>13){
					square++;
					t_show=square%4;
					n_pressed=0;
				}
				if(paddata.BTN_SQUARE && n_pressed>13){
					if(!c_show) c_show=true;
					else c_show=false;
					n_pressed=0;
				}
				if(paddata.BTN_CIRCLE && n_pressed>13 && usb_found){
					if(write){
						write = false;
						write_data.close();
					}else{
						write = true;
						do{
							sprintf(path,"/dev_usb%03d/seismometer_%03d.data",usb_num,my_data);
							my_data++;
						}while(file_exist(path) && my_data<1000);
						if(my_data>999){
							usb_found = false;
							write = false;
						}else{
							write_data.open(path,ios::out);
							sprintf(data_char,"Data       Time     Nanosecs  SensorX  SensorY  SensorZ  SensorG\n");
							write_data << data_char;
						}
					}
					n_pressed=0;
				}
				ioPadClearBuf(0);
			}
			if(data.BTN_CROSS && n_pressed>13){
				GFX->AppExit();
			}
			if(data.BTN_TRIANGLE && n_pressed>13){
				square++;
				t_show=square%4;
				n_pressed=0;
			}
			if(data.BTN_SQUARE && n_pressed>13){
				if(!c_show)c_show=true;
				else c_show=false;
				n_pressed=0;
			}
			if(data.BTN_ACTION && n_pressed>13){
				calibrateMove(PLAYSTATION_MOVE_PAD_0);
				getGyroPosition(PLAYSTATION_MOVE_PAD_0, &S_X_HALF, &S_Y_HALF, &S_Z_HALF);
				n_pressed=0;
			}
			if(data.BTN_CIRCLE && n_pressed>13 && usb_found){
				if(write){
					write = false;
					write_data.close();
				}else{
					write = true;
					do{
						sprintf(path,"/dev_usb%03d/seismometer_%03d.data",usb_num,my_data);
						my_data++;
					}while(file_exist(path) && my_data<1000);
					if(my_data>999){
						usb_found = false;
						write = false;
					}else{
						write_data.open(path,ios::out);
						sprintf(data_char,"Data       Time     Nanosecs  SensorX  SensorY  SensorZ  SensorG\n");
						write_data << data_char;
					}
				}
				n_pressed=0;
			}
			getGyroPosition(PLAYSTATION_MOVE_PAD_0, &S_X, &S_Y, &S_Z);
			if(Max_X<abs(S_X))Max_X=abs(S_X);
			if(Max_Y<abs(S_Y))Max_Y=abs(S_Y);
			if(Max_Z<abs(S_Z))Max_Z=abs(S_Z);
		//	if(Max_G<abs(S_G))Max_G=abs(S_G);

			if(write){
				strftime (my_time, sizeof(my_time), "%Y/%m/%d %H:%M:%S", gmtime ((const time_t*)&sec));
				sprintf(data_char,"%s %9lu %f %f %f %f\n",my_time,nsec,S_X_HALF/S_X,S_Y_HALF/S_Y,S_Z_HALF/S_Z,0.f);
				write_data << data_char;
			}

			F2.Printf(200,100,COLOR_BLACK,"%02d:%02d:%02d %2.3f SECS %s",
				  time_on/3600, time_on/60, time_on%60, (float)(1.f/((fps==0) ? 1:fps)), (write)? "WRITING ON USB": " ");
			
			if((t_show==0 || t_show == 3) && !c_show)
				F2.Printf(200,450,COLOR_GREEN,"X %.4fG", S_X_HALF/S_X);	//512 is the middle
			if((t_show==1 || t_show == 3) && !c_show)
				F2.Printf(200,570,COLOR_BLUE, "Y %.4fG", S_Y_HALF/S_Y);	//455 is the middle
			if((t_show==2 || t_show == 3) && !c_show)
				F2.Printf(200,685,COLOR_RED,  "Z %.4fG", S_Z_HALF/S_Z);	//494 is the middle

		//	if((t_show==3 || t_show == 3) && !c_show)
		//		F2.Printf(200,810,COLOR_CYAN, "G %.4fG", S_G_HALF/S_G);	//512 is the middle
				
			if(c_show)
				F2.Printf(200,450,COLOR_GREEN,"MAX X %.4fG", 1.f*(float)(Max_X)/S_X_HALF);	//512 is the middle
			if(c_show)
				F2.Printf(200,570,COLOR_BLUE, "MAX Y %.4fG", 1.f*(float)(Max_Y)/S_Y_HALF);	//455 is the middle
			if(c_show)
				F2.Printf(200,685,COLOR_RED,  "MAX Z %.4fG", 1.f*(float)(Max_Z)/S_Z_HALF);	//494 is the middle
		//	if(c_show)
		//		F2.Printf(200,810,COLOR_CYAN, "MAX G %.4fG", 1.f*(float)(Max_G)/S_G_HALF);	//512 is the middle
		
			S_X+=454;
			S_Y+=574;
			S_Z+=688;
		//	S_G+=814;

			pixel[0][0]=S_X;
			pixel[0][1]=S_Y;
			pixel[0][2]=S_Z;
		//	pixel[0][3]=S_G;
			for(u32 k=0;k<400 && !c_show;k++){
				if((t_show==0 || t_show == 3)) OBJ.Pixel4(530+(k*3),pixel[k][0],COLOR_GREEN);
				if((t_show==1 || t_show == 3)) OBJ.Pixel4(530+(k*3),pixel[k][1],COLOR_BLUE);
				if((t_show==2 || t_show == 3)) OBJ.Pixel4(530+(k*3),pixel[k][2],COLOR_RED);
		//		if((t_show==3 || t_show == 3)) OBJ.Pixel4(530+(k*3),pixel[k][3],COLOR_CYAN);
			}


			GFX->RescaleFlip();
			frame ++;
		
			for(u32 j=0;j<3;j++)
				for(u32 k=400;k>0;k--)
					pixel[k][j]=pixel[k-1][j];
			if(n_pressed<14)
				n_pressed++;
		
			time_on = difftime (time (NULL), starttime);
			fps = frame / ((time_on==0) ? 1:time_on);
		
		}
	}else{
		starttime = time(NULL);
		while(1){
			BMap.DrawBitmap(&Precalculated_Layer2);

			ioPadGetInfo(&padinfo);
			if(padinfo.status[0]){
				ioPadGetData(0, &paddata);
				if(paddata.BTN_CROSS && n_pressed>13){
					n_pressed=0;
					goto draw_howto;
				}
				ioPadClearBuf(0);
			}
			if(n_pressed<14)
				n_pressed++;
			GFX->RescaleFlip();
			time_on = difftime (time (NULL), starttime);
			fps = frame / ((time_on==0) ? 1:time_on);
			if(GFX->ExitSignalStatus()) goto end_all;
		}
	draw_howto:
		sleep(1);
		starttime = time(NULL);
		frame = 0;
		while(1){
			BMap.DrawBitmap(&Precalculated_Layer2);
			IMG.DrawIMG(CalibX,CalibY,png);
			ioPadGetInfo(&padinfo);
			if(padinfo.status[0]){
				ioPadGetData(0, &paddata);
				if(paddata.BTN_CROSS && n_pressed>13){
					n_pressed=0;
					goto pad_init;
				}
				ioPadClearBuf(0);
			}
			if(n_pressed<14)
				n_pressed++;
			GFX->RescaleFlip();
			time_on = difftime (time (NULL), starttime);
			fps = frame / ((time_on==0) ? 1:time_on);
			if(GFX->ExitSignalStatus()) goto end_all;
		}
			
	pad_init:
		sleep(1);
		starttime = time(NULL);
		frame = 0;
		while(GFX->GetAppStatus()){
			if(GFX->ExitSignalStatus()) goto end_all;
			sysGetCurrentTime(&sec,&nsec);
			BMap.DrawBitmap(&Precalculated_Layer2);
			BMap.DrawBitmap(&Precalculated_Layer);

			ioPadGetInfo(&padinfo);
			if(padinfo.status[0]){
				ioPadGetData(0, &paddata);
				if(paddata.BTN_CROSS && n_pressed>13){
					GFX->AppExit();
				}
				if(paddata.BTN_TRIANGLE && n_pressed>13){
					square++;
					t_show=square%5;
					n_pressed=0;
				}
				if(paddata.BTN_SQUARE && n_pressed>13){
					if(!c_show)c_show=true;
					else c_show=false;
					n_pressed=0;
				}
				if(paddata.BTN_CIRCLE && n_pressed>13 && usb_found){
					if(write){
						write = false;
						write_data.close();
					}else{
						write = true;
						do{
							sprintf(path,"/dev_usb%03d/seismometer_%03d.data",usb_num,my_data);
							my_data++;
						}while(file_exist(path) && my_data<1000);
						if(my_data>999){
							usb_found = false;
							write = false;
						}else{
							write_data.open(path,ios::out);
							sprintf(data_char,"Data       Time     Nanosecs  SensorX  SensorY  SensorZ  SensorG\n");
							write_data << data_char;
						}
					}
					n_pressed=0;
				}
				S_X = paddata.SENSOR_X;
				S_Y = paddata.SENSOR_Y;
				S_Z = paddata.SENSOR_Z;
				S_G = paddata.SENSOR_G;
				if(Max_X<S_X)Max_X=S_X;
				if(Max_Y<S_Y)Max_Y=S_Y;
				if(Max_Z<S_Z)Max_Z=S_Z;
				if(Max_G<S_G)Max_G=S_G;
				ioPadClearBuf(0);
			}

			if(write){
				strftime (my_time, sizeof(my_time), "%Y/%m/%d %H:%M:%S", gmtime ((const time_t*)&sec));
				sprintf(data_char,"%s %9lu %f %f %f %f\n",my_time,nsec,S_X_HALF/S_X,S_Y_HALF/S_Y,S_Z_HALF/S_Z,S_G_HALF/S_G);
				write_data << data_char; 
			}
		
			F2.Printf(200,100,COLOR_BLACK,"%02d:%02d:%02d %2.3f SECS %s",
				  time_on/3600, time_on/60, time_on%60, (float)(1.f/((fps==0) ? 1:fps)), (write)? "WRITING ON USB": " ");
			if((t_show==0 || t_show == 4) && !c_show) 
				F2.Printf(200,450,COLOR_GREEN,"X %.4fG", S_X_HALF/S_X);	//512 is the middle
			if((t_show==1 || t_show == 4) && !c_show)
				F2.Printf(200,570,COLOR_BLUE, "Y %.4fG", S_Y_HALF/S_Y);	//455 is the middle
			if((t_show==2 || t_show == 4) && !c_show) 
				F2.Printf(200,685,COLOR_RED,  "Z %.4fG", S_Z_HALF/S_Z);	//494 is the middle
			if((t_show==3 || t_show == 4) && !c_show)
				F2.Printf(200,810,COLOR_CYAN, "G %.4fG", S_G_HALF/S_G);	//512 is the middle
				
			if(c_show)
				F2.Printf(200,450,COLOR_GREEN,"MAX X %.4fG", 1.f*(float)(Max_X)/S_X_HALF);	//512 is the middle
			if(c_show)
				F2.Printf(200,570,COLOR_BLUE, "MAX Y %.4fG", 1.f*(float)(Max_Y)/S_Y_HALF);	//455 is the middle
			if(c_show)
				F2.Printf(200,685,COLOR_RED,  "MAX Z %.4fG", 1.f*(float)(Max_Z)/S_Z_HALF);	//494 is the middle
			if(c_show)
				F2.Printf(200,810,COLOR_CYAN, "MAX G %.4fG", 1.f*(float)(Max_G)/S_G_HALF);	//512 is the middle
		
			S_X-=62;
			S_Y+=108;
			S_Z+=195;
			S_G+=300;

			pixel[0][0]=S_X;
			pixel[0][1]=S_Y;
			pixel[0][2]=S_Z;
			pixel[0][3]=S_G;
			for(u32 k=0;k<400 && !c_show;k++){
				if((t_show==0 || t_show == 4)) OBJ.Pixel4(530+(k*3),pixel[k][0],COLOR_GREEN);
				if((t_show==1 || t_show == 4)) OBJ.Pixel4(530+(k*3),pixel[k][1],COLOR_BLUE);
				if((t_show==2 || t_show == 4)) OBJ.Pixel4(530+(k*3),pixel[k][2],COLOR_RED);
				if((t_show==3 || t_show == 4)) OBJ.Pixel4(530+(k*3),pixel[k][3],COLOR_CYAN);
			}


			GFX->RescaleFlip();
			frame ++;
		
			for(u32 j=0;j<4;j++)
				for(u32 k=400;k>0;k--)
					pixel[k][j]=pixel[k-1][j];
			if(n_pressed<14)n_pressed++;
		
			time_on = difftime (time (NULL), starttime);
			fps = frame / ((time_on==0) ? 1:time_on);
		
		}
	}
end_all:	
	if(write)
		write_data.close(); 

	if(move == LIBMOVE_OK)
		endLibMove();

	free(png);
	BMap.ClearBitmap(&Precalculated_Layer);
	BMap.ClearBitmap(&Precalculated_Layer2);

	GFX->NoRSX_Exit();
	ioPadEnd();
	return 0;
}