sensor_thread.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #include <stdio.h>
  2. #include "sensor_thread.h"
  3. #include "bmc_main.h"
  4. #include "bmc_conf.h"
  5. #include <stdint.h>
  6. int sensor_init(void);
  7. int MonitorTSensors(uint8_t sensorNum);
  8. int MonitorNonTSensors(uint8_t sensorNum);
  9. /*
  10. * Sensor monitor thread.
  11. * Author: Jimbo
  12. */
  13. void *sensor_main(void *args)
  14. {
  15. uint8_t i;
  16. volatile uint32_t sensorTick_old = 0;
  17. printf("start sensor manage thread.\n");
  18. sensor_init();
  19. while(1)
  20. {
  21. // printf("%d, %d\n",sensorTick_old, g_BMCInfo.sensorTick);
  22. if(sensorTick_old != g_BMCInfo.sensorTick)
  23. {
  24. sensorTick_old = g_BMCInfo.sensorTick;
  25. for(i=0;i<MAX_SENSOR_NUM;i++)
  26. {
  27. /*printf("i=%d,eventType:%d, powerOnTick:%d, powerondelay:%d, resetTick:%d, resetDelay:%d,sensorTick:%d, interval:%d\n",
  28. i,
  29. g_BMCInfo.sensorInfo[i].sensorSdr->full_sensor_rec.EventTypeCode,
  30. g_BMCInfo.powerOnTick, g_BMCInfo.sensorInfo[i].sensorDev->poweron_delay,
  31. g_BMCInfo.sysResetTick, g_BMCInfo.sensorInfo[i].sensorDev->reset_delay,
  32. g_BMCInfo.sensorTick, g_BMCInfo.sensorInfo[i].sensorDev->monitor_interval);*/
  33. //monitor threshold sensor
  34. if(g_BMCInfo.sensorInfo[i].sensorSdr->full_sensor_rec.EventTypeCode == THRESHOLD_SENSOR_CLASS)
  35. {
  36. //printf("g_BMCInfo.sensorInfo[i].sensorSdr->full_sensor_rec.EventTypeCode is %x\n",g_BMCInfo.sensorInfo[i].sensorSdr->full_sensor_rec.EventTypeCode);
  37. if ((0 == (g_BMCInfo.sensorTick % g_BMCInfo.sensorInfo[i].sensorDev->monitor_interval)) &&
  38. (g_BMCInfo.powerOnTick >= g_BMCInfo.sensorInfo[i].sensorDev->poweron_delay) &&
  39. (g_BMCInfo.sysResetTick >= g_BMCInfo.sensorInfo[i].sensorDev->reset_delay))
  40. {
  41. /* Monitor threshold sensor */
  42. MonitorTSensors (i);
  43. }
  44. }
  45. //monitor none threshold sensor
  46. else
  47. {
  48. //printf("g_BMCInfo.sensorInfo[i].sensorSdr->full_sensor_rec.EventTypeCode is %x\n",g_BMCInfo.sensorInfo[i].sensorSdr->full_sensor_rec.EventTypeCode);
  49. if ((0 == (g_BMCInfo.sensorTick%g_BMCInfo.sensorInfo[i].sensorDev->monitor_interval)) &&
  50. (g_BMCInfo.powerOnTick >= g_BMCInfo.sensorInfo[i].sensorDev->poweron_delay) &&
  51. (g_BMCInfo.sysResetTick >= g_BMCInfo.sensorInfo[i].sensorDev->reset_delay))
  52. {
  53. /* Monitor not threshold sensor */
  54. MonitorNonTSensors (i);
  55. }
  56. }
  57. }
  58. }
  59. else
  60. {
  61. usleep(100000);
  62. }
  63. }
  64. }
  65. int sensor_init(void)
  66. {
  67. uint8_t i;
  68. for(i=0;i<MAX_SENSOR_NUM;i++)
  69. {
  70. g_BMCInfo.sensorInfo[i].sensorReading = 0;
  71. g_BMCInfo.sensorInfo[i].sensorMonitBusy = 0;
  72. g_BMCInfo.sensorInfo[i].sensorDev = getSensorDev(i);
  73. g_BMCInfo.sensorInfo[i].sensorSdr = getSensorSdr(i);
  74. }
  75. return 0;
  76. }
  77. int MonitorTSensors(uint8_t sensorNum)
  78. {
  79. hal_t hal_info = {0};
  80. g_BMCInfo.sensorInfo[sensorNum].sensorMonitBusy = 1;
  81. hal_info.pbyte = &g_BMCInfo.sensorInfo[sensorNum].sensorReading;
  82. g_BMCInfo.sensorInfo[sensorNum].sensorDev->device_read(&hal_info);
  83. // printf("sensor:%d %s, value:%d\n", sensorNum, g_BMCInfo.sensorInfo[sensorNum].sensorSdr->full_sensor_rec.IDStr, g_BMCInfo.sensorInfo[sensorNum].sensorReading);
  84. g_BMCInfo.sensorInfo[sensorNum].sensorMonitBusy = 0;
  85. return 0;
  86. }
  87. int MonitorNonTSensors(uint8_t sensorNum)
  88. {
  89. hal_t hal_info = {0};
  90. g_BMCInfo.sensorInfo[sensorNum].sensorMonitBusy = 1;
  91. hal_info.pbyte = &g_BMCInfo.sensorInfo[sensorNum].sensorReading;
  92. g_BMCInfo.sensorInfo[sensorNum].sensorDev->device_read(&hal_info);
  93. // printf("sensor:%d %s, value:%d\n", sensorNum, g_BMCInfo.sensorInfo[sensorNum].sensorSdr->full_sensor_rec.IDStr, g_BMCInfo.sensorInfo[sensorNum].sensorReading);
  94. g_BMCInfo.sensorInfo[sensorNum].sensorMonitBusy = 0;
  95. return 0;
  96. }