ManageMessage.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. /****************************************
  2. 消息管理1.发送;2接收;3.存储;4.读取;
  3. ****************************************/
  4. #include "includes.h"
  5. SUT_MESAGE_LIST g_sutMesageList;
  6. /*****************************************************************
  7. MESAGESysReadIndex
  8. 从这里读取短信
  9. ******************************************************************/
  10. void MESAGESysReadIndex(void)
  11. {
  12. u8 *pBuf;
  13. pBuf=(u8 *)&g_sutMesageList;
  14. sFlash_Read(pBuf,MESAGE_DATA_ADDR,sizeof(SUT_MESAGE_LIST));
  15. }
  16. /******************************************************************
  17. MESAGESysSaveIndex
  18. *******************************************************************/
  19. void MESAGESysSaveIndex(void)
  20. {
  21. u8 *pBuf;
  22. pBuf=(u8 *)&g_sutMesageList;
  23. sFlash_Write(pBuf,MESAGE_DATA_ADDR,sizeof(SUT_MESAGE_LIST));
  24. }
  25. /***************************************************************
  26. 先暂且他不会损坏
  27. ****************************************************************/
  28. /****************************************************************
  29. 获取短信实际长度
  30. *****************************************************************/
  31. int GetMessageLen(int MessageIndex)
  32. {
  33. int len;
  34. if(MessageIndex<0)return 0;
  35. len=g_sutMesageList.MESAGEInfo[MessageIndex].MESAGELen;
  36. if(len<0 || len>(MESAGE_DATA_ADDR_END-MESAGE_DATA_ADDR))return 0;
  37. else return len;
  38. }
  39. /*****************************************************************
  40. 读取短信
  41. **********************************************************************/
  42. int ReadMessageData(int MessageIndex,u32 startAddr,u32 readLen,unsigned char *pData)
  43. {
  44. int len;
  45. u32 addr;
  46. if(MessageIndex<0)return 0;
  47. if(MessageIndex>=g_sutMesageList.MESAGECount)return 0;
  48. if((startAddr+readLen)>g_sutMesageList.MESAGEInfo[MessageIndex].MESAGELen){
  49. len=g_sutMesageList.MESAGEInfo[MessageIndex].MESAGELen-startAddr;
  50. }else{
  51. len=readLen;
  52. }
  53. addr=g_sutMesageList.MESAGEInfo[MessageIndex].MESAGEAddr + startAddr;
  54. sFlash_Read(pData,addr,len);
  55. return len;
  56. }
  57. #if 1
  58. void MessageEditInit(SUT_MESSAGE_EDIT *p,unsigned short x,unsigned char y,char *def)
  59. {
  60. p->x=x;
  61. p->y=y;
  62. p->len=strlen(def);
  63. p->ylen=16;
  64. p->item=0;
  65. }
  66. void MessageEditShow(SUT_MESSAGE_EDIT *p,char *def)
  67. {
  68. unsigned short x;
  69. char *temp =def;
  70. char buf[62];
  71. char buf1[4];
  72. uint8_t i;
  73. uint8_t item,page;
  74. uint8_t write;
  75. GuiClearArea(p->x,p->y,p->x+p->xlen,p->y+p->ylen);
  76. memset(p->buffer1,0,sizeof(p->buffer1));
  77. x=LCD_WIDTH-p->x-1;
  78. p->item=x/8;//最多一行可以显示多少个字节
  79. page=0;
  80. item = 0;
  81. write = 0;
  82. while(*temp != 0)
  83. {
  84. if(*temp > 0x9f)
  85. {
  86. if(p->item-item >=2)
  87. {
  88. memcpy(&p->buffer1[0]+item, temp, 2);
  89. item += 2;
  90. temp += 2;
  91. }else
  92. write = 1;
  93. }
  94. else
  95. {
  96. if(p->item-item >= 1)
  97. {
  98. p->buffer1[item] = *temp;
  99. item ++;
  100. temp ++;
  101. }
  102. else
  103. write=1;
  104. }
  105. if(write)
  106. {
  107. write=0;
  108. p->buffer1[item]=0;
  109. GuiShowStr(p->x,p->y+page++*16,p->buffer1,0x01);
  110. item=0;
  111. }
  112. }
  113. p->buffer1[item]=0;
  114. GuiShowStr(p->x,p->y+page++*16,p->buffer1,0x01);
  115. }
  116. #else
  117. void MessageEditInit(SUT_MESSAGE_EDIT *p,unsigned short x,unsigned char y,char *def)
  118. {
  119. p->x=x;
  120. p->y=y;
  121. strncpy(p->buffer,def,NUM_EDIT_BUFFER_LEN_MAX);
  122. p->len=strlen(p->buffer);
  123. p->xlen=p->len*8;
  124. p->ylen=16;
  125. p->item=0;
  126. }
  127. void MessageEditShow(SUT_MESSAGE_EDIT *p,char *def)
  128. {
  129. unsigned short x,w,j=0;
  130. char *temp =def;
  131. char buf[2];
  132. GuiClearArea(p->x,p->y,p->x+p->xlen,p->y+p->ylen);
  133. x=p->item*8;
  134. p->len=strlen(def);//多此一举
  135. sprintf(buf,"%d",p->len);
  136. SlwTrace(INF,buf);
  137. memset(p->buffer1,0,sizeof(p->buffer1));
  138. IWDG_ReloadCounter();
  139. // if(((int)p->len)<100&&(g_ucMessageFlag==0)){
  140. while(j<(int)(p->len)/18+1){
  141. strncpy(p->buffer1,temp+j*18,18);//0-17//p->buffer
  142. p->buffer[18]=0;
  143. GuiShowStr(p->x,p->y+j*16,p->buffer1,0x01);
  144. if((j)*18>p->len)break;
  145. j++;
  146. }
  147. }
  148. #endif