InternalComm.c 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. #include <sys/types.h>
  2. #include <sys/stat.h>
  3. #include <fcntl.h>
  4. #include <linux/termios.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <time.h>
  8. #include <stdlib.h>
  9. #include <sys/ipc.h>
  10. #include <sys/shm.h>
  11. #include <sys/mman.h>
  12. #include <linux/sockios.h>
  13. #include <linux/socket.h>
  14. #include <sys/socket.h>
  15. #include <netinet/in.h>
  16. #include <sys/time.h>
  17. #include <sys/timeb.h>
  18. #include <math.h>//for pow
  19. #include <unistd.h>
  20. #include "../../define.h"
  21. //#define Debug
  22. struct SysConfigAndInfo *ShmSysConfigAndInfo;
  23. struct StatusCodeData *ShmStatusCodeData;
  24. struct FanModuleData *ShmFanModuleData;
  25. struct RelayModuleData *ShmRelayModuleData;
  26. #ifdef SystemLogMessage
  27. int StoreLogMsg(unsigned char *DataString)
  28. {
  29. unsigned char Buf[256];
  30. time_t CurrentTime;
  31. struct tm *tm;
  32. memset(Buf,0,sizeof(Buf));
  33. CurrentTime = time(NULL);
  34. tm=localtime(&CurrentTime);
  35. sprintf(Buf,"echo \"%04d.%02d.%02d %02d:%02d:%02d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
  36. tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
  37. DataString,
  38. tm->tm_year+1900,tm->tm_mon+1);
  39. system(Buf);
  40. #ifdef Debug
  41. printf("%s \n",DataString);
  42. #endif
  43. }
  44. #endif
  45. int DiffTimeb(struct timeb ST, struct timeb ET)
  46. {
  47. //return milli-second
  48. unsigned int StartTime,StopTime;
  49. StartTime=(unsigned int)ST.time;
  50. StopTime=(unsigned int)ET.time;
  51. return (StopTime-StartTime)*1000+ET.millitm-ST.millitm;
  52. }
  53. /**************************************************************************************/
  54. /**************************Init all share memory *********************************/
  55. /**************************************************************************************/
  56. int InitShareMemory()
  57. {
  58. int MeterSMId;
  59. //creat ShmSysConfigAndInfo
  60. if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), 0777)) < 0)
  61. {
  62. #ifdef SystemLogMessage
  63. StoreLogMsg("[InternalComm]InitShareMemory:shmget ShmSysConfigAndInfo NG");
  64. #endif
  65. return 0;
  66. }
  67. else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  68. {
  69. #ifdef SystemLogMessage
  70. StoreLogMsg("[InternalComm]InitShareMemory:shmat ShmSysConfigAndInfo NG");
  71. #endif
  72. return 0;
  73. }
  74. //creat ShmStatusCodeData
  75. if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), 0777)) < 0)
  76. {
  77. #ifdef SystemLogMessage
  78. StoreLogMsg("[InternalComm]InitShareMemory:shmget ShmStatusCodeData NG");
  79. #endif
  80. return 0;
  81. }
  82. else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  83. {
  84. #ifdef SystemLogMessage
  85. StoreLogMsg("[InternalComm]InitShareMemory:shmat ShmStatusCodeData NG");
  86. #endif
  87. return 0;
  88. }
  89. //creat ShmFanModuleData
  90. if ((MeterSMId = shmget(ShmFanBdKey, sizeof(struct FanModuleData), 0777)) < 0)
  91. {
  92. #ifdef SystemLogMessage
  93. StoreLogMsg("[InternalComm]InitShareMemory:shmget ShmFanModuleData NG");
  94. #endif
  95. return 0;
  96. }
  97. else if ((ShmFanModuleData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  98. {
  99. #ifdef SystemLogMessage
  100. StoreLogMsg("[InternalComm]InitShareMemory:shmat ShmFanModuleData NG");
  101. #endif
  102. return 0;
  103. }
  104. memset(ShmFanModuleData,0,sizeof(struct FanModuleData));
  105. //creat ShmRelayModuleData
  106. if ((MeterSMId = shmget(ShmRelayBdKey, sizeof(struct RelayModuleData), 0777)) < 0)
  107. {
  108. #ifdef SystemLogMessage
  109. StoreLogMsg("[InternalComm]InitShareMemory:shmget ShmRelayModuleData NG");
  110. #endif
  111. return 0;
  112. }
  113. else if ((ShmRelayModuleData = shmat(MeterSMId, NULL, 0)) == (void *) -1)
  114. {
  115. #ifdef SystemLogMessage
  116. StoreLogMsg("[InternalComm]InitShareMemory:shmat ShmRelayModuleData NG");
  117. #endif
  118. return 0;
  119. }
  120. return 1;
  121. }
  122. int InitComPort()
  123. {
  124. int fd;
  125. struct termios tios;
  126. fd = open("/dev/ttyS4", O_RDWR);
  127. if(fd<=0)
  128. {
  129. #ifdef SystemLogMessage
  130. StoreLogMsg("[InternalComm]InitComPort: open /dev/ttyS4 NG");
  131. #endif
  132. return -1;
  133. }
  134. ioctl (fd, TCGETS, &tios);
  135. tios.c_cflag = B115200| CS8 | CLOCAL | CREAD;
  136. tios.c_lflag = 0;
  137. tios.c_iflag = 0;
  138. tios.c_oflag = 0;
  139. tios.c_cc[VMIN]=0;
  140. tios.c_cc[VTIME]=1000;
  141. tios.c_lflag=0;
  142. tcflush(fd, TCIFLUSH);
  143. ioctl (fd, TCSETS, &tios);
  144. return fd;
  145. }
  146. /**************************************************************/
  147. /************** main function********************************/
  148. /*************************************************************/
  149. int main(int argc,char *argv[])
  150. {
  151. int Uart4Fd;
  152. //Initialization
  153. if(InitShareMemory()==0)
  154. {
  155. #ifdef SystemLogMessage
  156. StoreLogMsg("[InternalComm]main:InitShareMemory NG");
  157. #endif
  158. if(ShmStatusCodeData!=NULL)
  159. {
  160. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory=1;
  161. }
  162. sleep(5);
  163. return 0;
  164. }
  165. Uart4Fd=InitComPort();
  166. if(Uart4Fd<0)
  167. {
  168. #ifdef SystemLogMessage
  169. StoreLogMsg("[InternalComm]main:InitComPort NG");
  170. #endif
  171. if(ShmStatusCodeData!=NULL)
  172. {
  173. ShmStatusCodeData->AlarmCode.AlarmEvents.bits.CsuInitFailed=1;
  174. }
  175. sleep(5);
  176. return 0;
  177. }
  178. while(1)
  179. {
  180. //processing
  181. }//main while loop
  182. }