hook.c 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. #include "includes.h"
  2. #include "hook.h"
  3. //////////低功耗控制钩子功能/////////////////////
  4. unsigned int pwrSaveTick;
  5. unsigned char sendEnableNow=0;
  6. unsigned char QueryTime=10;//查询时间 QueryTime/2
  7. unsigned char QueryTick=0;//查询时间计时
  8. ASSIST_DEF uiAssist;
  9. void enableDataSend(void)
  10. {
  11. //此刻可以发GPS数据啦,我们让接下来2秒内可以发心跳或GPS位置包,我们只限制这两个就好了
  12. uTimerStart(&pwrSaveTick,200);
  13. sendEnableNow=1;
  14. SlwTrace(INF, "Send enable",1);
  15. }
  16. char isSendDataEnable(void)
  17. {
  18. if(hgs_poc_type == POC_BND) return 1;//西安POC的话,就一直返回yes,不存在低功耗操作
  19. if(newPara.pwrMode == 1) return 1;//常规模式就一直返回yes
  20. if(sendEnableNow==0) return 0;
  21. else return 1;
  22. }
  23. void powerSaveHandle(void)
  24. {
  25. if(sendEnableNow==0) return;
  26. if(uTimerExpired(&pwrSaveTick)==0) return; //未超时返回
  27. sendEnableNow=0;
  28. SlwTrace(INF, "Send disable",1);
  29. }
  30. void SwitchGroupCtrl(void)
  31. {
  32. if(m_GroupSwitch)
  33. {
  34. if(++m_GroupSwitchCnt >=5)
  35. {
  36. //MeSpeak(ENCODE_ASCII, "CDCBB3F6", 0);
  37. if(sutUIstatus.Status == UIS_STANDBY)
  38. ShowButton(1,107,"菜单");
  39. m_GroupSwitch=0;
  40. SlwTrace(INF, "QuitGroupSel",1);
  41. }
  42. }
  43. }
  44. void SwitchGroupPre(void)
  45. {
  46. //让菜单变成:确定
  47. ShowButton(1,107,"确定");
  48. m_GroupSwitch=1;
  49. m_GroupSwitchCnt=0;
  50. }
  51. void SwitchVoicePre(char type)
  52. {
  53. char buf[20];
  54. //GuiDrawRect(29,110,128,126,1);
  55. GuiClearRect(29,110,90,126);
  56. switch(m_VoiceStep)
  57. {
  58. case 0:
  59. m_VoiceStep=1;
  60. break;
  61. case 1:
  62. if(type)
  63. {
  64. if(newPara.VolumLv<8&&(hgs_poc_type==POC_OWN))newPara.VolumLv++;
  65. if(newPara.VolumLv<9&&(hgs_poc_type==POC_BND))newPara.VolumLv++;
  66. }else{
  67. if(newPara.VolumLv>0){
  68. newPara.VolumLv--;
  69. // if(m_VoiceSwitchCnt<=2)GuiFillRect(29+1+newPara.VolumLv*10,110+1,127,126-1,COLOR_WHITE_BACK);
  70. // printf("newPara.VolumLv===%d\r\n",newPara.VolumLv);
  71. }
  72. }
  73. break;
  74. }
  75. //GuiFillRect(29,110+1,29+newPara.VolumLv*10-1,126-1,COLOR_BLUE);
  76. GuiShowBmp(29,110,"volume.bmp");
  77. snprintf(buf,sizeof(buf),"音量 %d",newPara.VolumLv);
  78. GuiShowStr(45,110,buf,1,0);
  79. snprintf(buf,sizeof(buf),"AT+CLVL=%d\r\n",newPara.VolumLv*10);
  80. ModemSendAt(buf);
  81. if(hgs_poc_type==POC_OWN){
  82. snprintf(buf,sizeof(buf),"AT+CRSL=%d\r\n",newPara.VolumLv*10);
  83. ModemSendAt(buf);
  84. }else {
  85. if(newPara.KeySound!=0){
  86. snprintf(buf,sizeof(buf),"AT+POC=tonevol=%d\r\n",newPara.VolumLv);
  87. ModemSendAt(buf);
  88. }
  89. snprintf(buf,sizeof(buf),"AT+POC=ttsvol=%d\r\n",(newPara.VolumLv));
  90. ModemSendAt(buf);
  91. }
  92. m_VoiceSwitch=1;
  93. m_VoiceSwitchCnt=0;
  94. }
  95. void SwitchVoiceCtrl(void)
  96. {
  97. if(m_VoiceSwitch)
  98. {
  99. if(++m_VoiceSwitchCnt >=2)
  100. {
  101. if(sutUIstatus.Status == UIS_STANDBY){
  102. //GuiClearRect(29,110,128,126);//GuiDrawRect(29,50+50,128,66+50,1);
  103. GuiClearRect(29,110,90,126);
  104. ModifyConfigureFile(0);
  105. m_VoiceSwitch=0;
  106. m_VoiceStep=0;
  107. SlwTrace(INF, "QuitVoiceSel",1);
  108. }
  109. }
  110. }
  111. }
  112. void SpkerLvlProcess(char update)
  113. {
  114. char buf[30];
  115. static char lastVolum=0;
  116. static char ChangeFlag=0;
  117. static short cnt=0;
  118. short tempVbat;
  119. char i; //0 1 2 3 4 5 6 7 8 9
  120. const short tempVbatArr[10]={0,5,17,27,34,48,90,150,190,280};
  121. //122 180 220 280
  122. //const short SendAtLv[10] = {0,12,24,35,40,45,50,55,60,65};
  123. const short SendAtLv[10] = {0,20,30,40,50,60,70,80,90,100};
  124. //newPara.VolumLv=(GetPowerVbat()/30);//0~300
  125. tempVbat=GetPowerVbat();
  126. for(i=0;i<10;i++)
  127. {
  128. if(tempVbat>=tempVbatArr[i])newPara.VolumLv=i;
  129. // if(newPara.VolumLv<5)Coe=12;
  130. // else Coe=8;
  131. }
  132. if(update) goto SETLVL;
  133. // printf("VolumLv=====%d\r\n",newPara.VolumLv);
  134. if(lastVolum!=newPara.VolumLv){
  135. lastVolum=newPara.VolumLv;
  136. ChangeFlag=1;
  137. cnt=0;
  138. }
  139. if(ChangeFlag){
  140. if(cnt++<10)return;
  141. SETLVL:
  142. snprintf(buf,sizeof(buf),"音量 %d",newPara.VolumLv);
  143. printf(buf);
  144. snprintf(buf,sizeof(buf),"AT+CLVL=%d\r\n",SendAtLv[newPara.VolumLv]);//10
  145. ModemSendAt(buf);
  146. if(hgs_poc_type==POC_OWN){
  147. snprintf(buf,sizeof(buf),"AT+CRSL=%d\r\n",newPara.VolumLv*10);//10
  148. ModemSendAt(buf);
  149. }else {
  150. if(newPara.KeySound!=0){
  151. snprintf(buf,sizeof(buf),"AT+POC=tonevol=%d\r\n",newPara.VolumLv);
  152. ModemSendAt(buf);
  153. }
  154. snprintf(buf,sizeof(buf),"AT+POC=ttsvol=%d\r\n",(newPara.VolumLv));
  155. ModemSendAt(buf);
  156. }
  157. ChangeFlag=0;
  158. cnt=0;
  159. }
  160. }
  161. void HeadsetProcess(void)
  162. {
  163. static signed char HeadsetStatue=0;
  164. static signed char HeadseLastStatue=0;
  165. if(INTERNAL_HEADSET==1) return;
  166. if(RESET==GPIO_ReadInputDataBit(HEADSET_PORT,HEADSET_PIN))HeadsetStatue=-1;
  167. else HeadsetStatue=1;
  168. if(HeadseLastStatue!=HeadsetStatue){
  169. if(HeadsetStatue==1){
  170. printf("耳机接入---\r\n");
  171. //ModemSendAt("AT+AUDCH=1,3\r\n");
  172. sutPocStatus.HeadSetPtt=1;
  173. }
  174. else {
  175. printf("耳机拔出---\r\n");
  176. ModemSendAt("AT+AUDCH=0,0\r\n");
  177. sutPocStatus.HeadSetPtt=0;
  178. }
  179. HeadseLastStatue=HeadsetStatue;
  180. }
  181. /*为了规避耳机拔出问题*/
  182. if(HeadsetPress && sutPocStatus.HeadSetPtt){
  183. if(uTimerExpired(&HeadsetPullPress)){
  184. if(hgs_poc_type==POC_BND)ModemSendAt("AT+POC=ptt,1\r\n");
  185. else {
  186. ModemSendAt("AT+POC=0B0000\r\n");
  187. }
  188. HeadsetPress=0;
  189. }
  190. }
  191. }
  192. //开机后的一些控制
  193. void onStartCtl(void){
  194. KeyCount();
  195. SwitchGroupCtrl();
  196. SwitchVoiceCtrl();
  197. if(newPara.lcdParaList[newPara.lcdParaDefaultIndex]>0){
  198. if(++LcdOnTimeCt>=newPara.lcdParaList[newPara.lcdParaDefaultIndex]){
  199. LcdOnTimeCt=0;
  200. if(sutPocStatus.FirstLogined==0){
  201. LCDBackLight(1);//没登陆过(刚开机),LCD一直亮着//0
  202. }else LCDBackLight(0);
  203. }
  204. }
  205. }
  206. void AtRequest()
  207. {
  208. static char step=0;
  209. switch(step)
  210. {
  211. case 0:
  212. break;
  213. }
  214. }
  215. void UiassistStart(unsigned char type){
  216. uiAssist.type=type;
  217. uiAssist.machine=0;
  218. uiAssist.status=1;
  219. }
  220. void UiassistEnd(unsigned char type){
  221. uiAssist.type=type;
  222. uiAssist.machine=0;
  223. uiAssist.status=0;
  224. assistResult=0;
  225. }
  226. unsigned char assistResult=0;
  227. unsigned char getAssistResult(void){
  228. unsigned char ret=0;
  229. ret=assistResult;
  230. if(assistResult) assistResult=0;
  231. return ret;
  232. }
  233. PT_THREAD (ptUIAssist(struct pt *pt)){
  234. static timer_t ptTimer;
  235. PT_BEGIN(pt);
  236. while(1){
  237. if(uiAssist.status!=0){
  238. switch(uiAssist.type){
  239. case 0: // //刚进入
  240. switch(uiAssist.machine){
  241. case 0:
  242. if(SimpleUserInfoScan(1, 2)){//操作完成了
  243. printf("获取成功了---\r\n");
  244. assistResult=1;
  245. uiAssist.status=0;
  246. }
  247. break;
  248. }
  249. break;
  250. case 1: //上翻
  251. switch(uiAssist.machine){
  252. case 0:
  253. if(SimpleUserInfoScan(0,0)){
  254. assistResult=1;
  255. uiAssist.status=0;
  256. }
  257. break;
  258. }
  259. break;
  260. case 2: //下翻
  261. switch(uiAssist.machine){
  262. case 0:
  263. if(SimpleUserInfoScan(0,1)){
  264. assistResult=1;
  265. uiAssist.status=0;
  266. }
  267. break;
  268. }
  269. break;
  270. }
  271. }
  272. PTTimerStart(&pt_timerPool, &ptTimer, 1);//1
  273. PT_WAIT_UNTIL(pt, PTTimerIsExpired(&ptTimer));
  274. }
  275. PT_END(pt);
  276. }