flNotify.c

Go to the documentation of this file.
00001 #include "flGlobal.h"
00002 #if FL_NOTIFY != 0
00003 #include <stdio.h>
00004 #include <psprtc.h>
00005 #include <pspkernel.h>
00006 #include <psppower.h>
00007 #include <pspimpose_driver.h>
00008 
00009 #if FL_INCLUDE_ALL_C == 0
00010 #include "flNotify.h"
00011 #include "flMemory.h"
00012 #include "flTimer.h"
00013 #include "flDebug.h"
00014 #include "flGraphics.h"
00015 #include "flGraphics2d.h"
00016 #include "flFont.h"
00017 #endif
00018 
00019 #if FL_KERNELMODE
00020 int     ntfyVolLast = -1;
00021 int     ntfyVolMuteLast = -1;
00022 float   ntfyVolTime = 0.0f;
00023 Timer*  ntfyVolTimer = NULL;
00024 #endif
00025 
00026 int     ntfyBattChrgLast = -1;
00027 int     ntfyBattPercentLast = -1;
00028 int     ntfyBattLowLast = -1;
00029 float   ntfyBattTime = 0.0f;
00030 Timer*  ntfyBattTimer = NULL;
00031 
00032 pspTime ntfyTimeLast;
00033 float   ntfyTimeTime = 0.0f;
00034 Timer*  ntfyTimeTimer = NULL;
00035 
00036 #if FL_NOTIFY_TRAYSIZE
00037 NotifyTrayItem ntfyTray[FL_NOTIFY_TRAYSIZE];
00038 Timer*         ntfyTrayTimer = NULL;
00039 #endif
00040 
00041 u32    ntfyTickCount = 0;
00042 bool   ntfyInitialized = false;
00043 bool   ntfyVisible = true;
00044 
00045 
00046 void ntfyInit() {
00047      sceRtcGetCurrentClockLocalTime(&ntfyTimeLast);
00048 
00049      #if FL_NOTIFY_TRAYSIZE
00050      u32 i;
00051      for(i = 0; i < FL_NOTIFY_TRAYSIZE; i++)
00052           ntfyTray[i].ntiTime = 0.0f;
00053      ntfyTrayTimer = timerCreate();
00054      #endif
00055 
00056      #if FL_KERNELMODE
00057      ntfyVolTimer = timerCreate();
00058      #endif
00059      
00060      ntfyBattTimer = timerCreate();
00061      
00062      ntfyTimeTimer = timerCreate();
00063      
00064      ntfyInitialized = true;
00065 }
00066 
00067 void ntfyTick() {
00068      if(!ntfyInitialized)
00069           return;
00070      
00071      ntfyTickCount++;
00072      if(ntfyTickCount > FL_NOTIFY_FREQUENCY) {
00073           float tempTick;                 
00074      
00075           #if FL_KERNELMODE
00076           tempTick = timerGetDeltaTime(ntfyVolTimer);
00077           if(ntfyVolTime > 0.0f) {
00078                ntfyVolTime -= tempTick;
00079                if(ntfyVolTime < 0.0f)
00080                     ntfyVolTime = 0.0f;
00081           }
00082           #if FL_NOTIFY_VOLUME
00083           ntfyCheckVolume();
00084           #endif
00085           #endif
00086 
00087           tempTick = timerGetDeltaTime(ntfyBattTimer);
00088           if(ntfyBattTime > 0.0f) {
00089                ntfyBattTime -= tempTick;
00090                if(ntfyBattTime < 0.0f)
00091                     ntfyBattTime = 0.0f;
00092           }
00093           #if FL_NOTIFY_BATTERY
00094           ntfyCheckBattery();
00095           #endif
00096           
00097           tempTick = timerGetDeltaTime(ntfyTimeTimer);
00098           if(ntfyTimeTime > 0.0f) {
00099                ntfyTimeTime -= tempTick;
00100                if(ntfyTimeTime < 0.0f)
00101                     ntfyTimeTime = 0.0f;
00102           }
00103           #if FL_NOTIFY_TIME
00104           ntfyCheckTime();
00105           #endif
00106           
00107           #if FL_NOTIFY_TRAYSIZE
00108           ntfyTrayTick();
00109           #endif
00110           
00111           ntfyTickCount = 0;
00112      }
00113      #if FL_NOTIFY_VOLUME
00114      if(ntfyVolTime > 0.0f)
00115           ntfyShowVolume();
00116      #endif
00117      #if FL_NOTIFY_BATTERY
00118      if(ntfyBattTime > 0.0f)
00119           ntfyShowBattery();
00120      #endif
00121      #if FL_NOTIFY_TIME
00122      if(ntfyTimeTime > 0.0f)
00123           ntfyShowTime();
00124      #endif
00125      
00126      #if FL_NOTIFY_TRAYSIZE
00127      ntfyTrayShow();
00128      #endif
00129 }
00130 
00131 void ntfyShowAll(float inTime) {
00132      #if FL_NOTIFY_VOLUME
00133      ntfyShowVolume();
00134      ntfyVolTime = inTime;
00135      #endif
00136      #if FL_NOTIFY_BATTERY
00137      ntfyShowBattery();
00138      ntfyBattTime = inTime;
00139      #endif
00140      #if FL_NOTIFY_TIME
00141      ntfyShowTime();
00142      ntfyTimeTime = inTime;
00143      #endif
00144      #if FL_NOTIFY_TIME
00145      ntfyShowDate();
00146      #endif
00147 }
00148 
00149 #if FL_KERNELMODE
00150 void ntfyCheckVolume() {
00151      if(!ntfyInitialized)
00152           return;
00153           
00154      int tempVol = sceImposeGetParam(PSP_IMPOSE_MAIN_VOLUME);
00155      int tempVolMute = sceImposeGetParam(PSP_IMPOSE_MUTE);
00156 
00157      if((tempVol >= 0) && (ntfyVolLast != tempVol)) {
00158           ntfyVolLast = tempVol;
00159           if((ntfyVolLast >= 0) && (ntfyVolTime < FL_NOTIFY_DURATION))
00160                ntfyVolTime = FL_NOTIFY_DURATION;
00161      }
00162      if((tempVolMute >= 0) && (ntfyVolMuteLast != tempVolMute)) {
00163           if((ntfyVolMuteLast >= 0) && (ntfyVolTime < FL_NOTIFY_DURATION))
00164                ntfyVolTime = FL_NOTIFY_DURATION;
00165           ntfyVolMuteLast = tempVolMute;
00166      }
00167 }
00168 #endif
00169 
00170 void ntfyCheckBattery() {
00171      if(!ntfyInitialized)
00172           return;
00173           
00174      int tempBattLow = scePowerIsLowBattery();
00175      int tempCharge = scePowerIsPowerOnline();
00176      int tempPercent = scePowerGetBatteryLifePercent();
00177      
00178      if(tempBattLow > 0) {
00179           if(ntfyBattTime < FL_NOTIFY_DURATION)
00180                ntfyBattTime = FL_NOTIFY_DURATION;
00181           #if FL_DEBUG_STATUS
00182           if(ntfyBattLowLast != 0)
00183                debugStatusLog("Battery low.");
00184           #endif
00185           ntfyBattLowLast = tempBattLow;
00186      }
00187      
00188      if((tempCharge >= 0) && (tempCharge != ntfyBattChrgLast)) {
00189           if((ntfyBattChrgLast >= 0) && (ntfyBattTime < FL_NOTIFY_DURATION))
00190                ntfyBattTime = FL_NOTIFY_DURATION;
00191           ntfyBattChrgLast = tempCharge;
00192           #if FL_DEBUG_STATUS
00193           if(tempCharge > 0)
00194               debugStatusLog("AC plugged in.");
00195           else
00196               debugStatusLog("AC removed.");          
00197           #endif
00198      }
00199      
00200      if((ntfyBattPercentLast >= 0) && (ntfyBattTime < FL_NOTIFY_DURATION)) {
00201           if((tempPercent < 75) && (ntfyBattPercentLast > 75))
00202                ntfyBattTime = FL_NOTIFY_DURATION;
00203           else if((tempPercent > 75) && (ntfyBattPercentLast < 75))
00204                ntfyBattTime = FL_NOTIFY_DURATION;
00205           else if((tempPercent < 50) && (ntfyBattPercentLast > 50))
00206                ntfyBattTime = FL_NOTIFY_DURATION;
00207           else if((tempPercent > 50) && (ntfyBattPercentLast < 50))
00208                ntfyBattTime = FL_NOTIFY_DURATION;
00209           else if((tempPercent < 25) && (ntfyBattPercentLast > 25))
00210                ntfyBattTime = FL_NOTIFY_DURATION;
00211           else if((tempPercent > 25) && (ntfyBattPercentLast < 25))
00212                ntfyBattTime = FL_NOTIFY_DURATION;
00213      }
00214      ntfyBattPercentLast = tempPercent;
00215 }
00216 
00217 void ntfyCheckTime() {
00218      if(!ntfyInitialized)
00219           return;
00220           
00221      pspTime tempTime;
00222      sceRtcGetCurrentClockLocalTime(&tempTime);
00223     
00224      if((tempTime.hour != ntfyTimeLast.hour) && (ntfyTimeTime < FL_NOTIFY_DURATION))
00225           ntfyTimeTime = FL_NOTIFY_DURATION;
00226      else if((ntfyTimeLast.minutes != tempTime.minutes) && (ntfyTimeTime < FL_NOTIFY_DURATION)) {
00227           if((tempTime.minutes == 15) || (tempTime.minutes == 30) || (tempTime.minutes == 45))
00228                ntfyTimeTime = FL_NOTIFY_DURATION;
00229      }
00230 
00231      ntfyTimeLast = tempTime;
00232 }
00233 
00234 #if FL_KERNELMODE
00235 void ntfyShowVolume() {
00236      if(!ntfyVisible)
00237           return;
00238           
00239      int tempVol = sceImposeGetParam(PSP_IMPOSE_MAIN_VOLUME);
00240      int tempVolMute = sceImposeGetParam(PSP_IMPOSE_MUTE);
00241      if(tempVol < 0) {
00242           #if FL_DEBUG_WARNING != 0
00243           debugWarning("Error retrieving volume percentage.");
00244           #endif
00245           return;
00246      }
00247      graphics2dDrawRectFilled(24, (SCREEN_HEIGHT - 12), (SCREEN_WIDTH - 28), 8, 0x7F7F7F7F);
00248      if(tempVol > 0) {
00249           tempVol *= (SCREEN_WIDTH - 28);
00250           tempVol /= 30;
00251           graphics2dDrawRectFilled(24, (SCREEN_HEIGHT - 12), tempVol, 8, 0xFFFFFFFF);
00252      }
00253      
00254      if(tempVolMute > 0) {
00255           graphics2dDrawLine(8, (SCREEN_HEIGHT - 12), 16, (SCREEN_HEIGHT - 4), 0xFF0000FF);
00256           graphics2dDrawLine(16, (SCREEN_HEIGHT - 12), 8, (SCREEN_HEIGHT - 4), 0xFF0000FF);
00257      }
00258 }
00259 #endif
00260 
00261 void ntfyShowBattery() {
00262      if(!ntfyVisible)
00263           return;
00264 
00265      int tempBatt = scePowerGetBatteryLifePercent();
00266      int tempLowBatt = scePowerIsLowBattery();
00267      int tempAC = scePowerIsPowerOnline();
00268      if(tempBatt < 0) {
00269           #if FL_DEBUG_WARNING != 0
00270           debugWarning("Error retrieving battery percentage.");
00271           #endif
00272           return;
00273      }
00274      if(tempAC < 0)
00275           tempAC = 0;
00276      
00277      u32 tempWidth = 32;
00278      u32 tempHeight = 12;
00279      u32 tempX = (SCREEN_WIDTH - (tempWidth + 4));
00280      u32 tempY = 4;
00281      
00282      graphics2dDrawRectFilled(tempX, tempY, tempWidth, tempHeight, 0x7F7F7F7F);
00283      graphics2dDrawRectFilled((tempX + 1), tempY, ((tempBatt * (tempWidth - 2)) / 100), tempHeight, (tempAC ? 0xFF00DFFF : (tempLowBatt > 0 ? 0x7F0000FF : 0x7F00FF00)));
00284      graphics2dDrawRect(tempX, tempY, tempWidth, tempHeight, 0xFFFFFFFF);
00285      graphics2dDrawLine((tempX + tempWidth), (tempY + 3), (tempX + tempWidth), ((tempY + tempHeight) - 3), 0xFFFFFFFF);
00286      
00287      #if FL_FONT
00288      char tempString[16];
00289      if(tempAC)
00290           sprintf(tempString, "AC");
00291      else
00292           sprintf(tempString, "%i", tempBatt);
00293      
00294      u32 tempFontWidth = fontStringWidth(fontDefault, tempString);
00295      u32 tempFontHeight = fontHeight(fontDefault);
00296      fontDraw2dString((tempX + ((tempWidth - tempFontWidth) >> 1)), (tempY + ((tempHeight - tempFontHeight) >> 1)), fontDefault, tempString);
00297      #endif
00298 }
00299 
00300 void ntfyShowTime() {
00301      if(!ntfyVisible)
00302           return;
00303           
00304      pspTime tempTime;
00305      sceRtcGetCurrentClockLocalTime(&tempTime);
00306      
00307      u32 tempWidth = 56;
00308      u32 tempHeight = 12;
00309      u32 tempX = (SCREEN_WIDTH - (tempWidth + 40));
00310      u32 tempY = 4;
00311      
00312      graphics2dDrawRectFilled((tempX + (tempHeight >> 1)), tempY, (tempWidth - (tempHeight >> 1)), tempHeight, 0xFF7F7F7F);
00313      graphics2dDrawEllipseFilled(tempX, tempY, tempHeight, tempHeight, 0xFF7F7F7F);
00314      graphics2dDrawEllipse(tempX, tempY, tempHeight, tempHeight, 0xFFFFFFFF);
00315      graphics2dDrawLine((tempX + (tempHeight >> 1)), (tempY + (tempHeight >> 1)), (tempX + (tempHeight >> 1)), tempY, 0xFFFFFFFF);
00316      graphics2dDrawLine((tempX + (tempHeight >> 1)), (tempY + (tempHeight >> 1)), (tempX + tempHeight), (tempY + (tempHeight >> 1)), 0xFFFFFFFF);
00317           
00318      #if FL_FONT
00319      char tempString[16];
00320      sprintf(tempString, "%02u:%02u", (unsigned int)tempTime.hour, (unsigned int)tempTime.minutes);
00321     
00322      u32 tempFontHeight = fontHeight(fontDefault);
00323      fontDraw2dString((tempX + tempHeight + 4), (tempY + ((tempHeight - tempFontHeight) >> 1)), fontDefault, tempString);
00324      #endif
00325 }
00326 
00327 void ntfyShowDate() {
00328 
00329 }
00330 
00331 #if FL_NOTIFY_TRAYSIZE
00332 void ntfyTrayAdd(char* inMessage, u32 inColor) {
00333      if(!ntfyInitialized || !inMessage || !inMessage[0])
00334           return;
00335      
00336      int i;
00337      #if FL_NOTIFY_TRAYSIZE > 1
00338      for(i = (FL_NOTIFY_TRAYSIZE - 2); i >= 0 ; i--)
00339           ntfyTray[i + 1] = ntfyTray[i];
00340      #endif
00341      for(i = 0; i < 255; i++)
00342           ntfyTray[0].ntiMessage[i] = inMessage[i];
00343      ntfyTray[0].ntiMessage[255] = 0;
00344      ntfyTray[0].ntiColor = inColor;
00345      ntfyTray[0].ntiTime = (FL_NOTIFY_DURATION * 2.0f);
00346 }
00347 
00348 void ntfyTrayTick() {
00349      if(!ntfyInitialized)
00350          return;
00351      
00352      float tempTick = timerGetDeltaTime(ntfyTrayTimer);
00353      
00354      u32 i;
00355      for(i = 0; i < FL_NOTIFY_TRAYSIZE; i++) {
00356           if(ntfyTray[i].ntiTime > 0.0f)
00357                ntfyTray[i].ntiTime -= tempTick;
00358           if(ntfyTray[i].ntiTime < 0.0f)
00359                ntfyTray[i].ntiTime = 0.0f;
00360      }
00361 }
00362 
00363 void ntfyTrayShow() {
00364      if(!ntfyVisible)
00365           return;
00366      
00367      int tempY = SCREEN_HEIGHT;
00368      
00369      u32 i;
00370      for(i = 0; i < FL_NOTIFY_TRAYSIZE; i++) {
00371           tempY -= fontHeight(fontDefault);
00372           
00373           if(ntfyTray[i].ntiTime <= 0.0f)
00374                continue;
00375 
00376           graphics2dDrawRectFilled(0, tempY, SCREEN_WIDTH, fontHeight(fontDefault), ((ntfyTray[i].ntiColor & 0x00FFFFFF) | 0xBF000000));
00377           fontDraw2dString(0, tempY, fontDefault, ntfyTray[i].ntiMessage);
00378      }
00379 }
00380 #endif
00381 
00382 #endif

Generated on Wed Sep 5 19:04:01 2007 for funcLib by  doxygen 1.5.1