- Main Page
- Classes
- Files

- File List
- File Members

# 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