common/sensor/sdr.c (71 lines of code) (raw):
#include <stdio.h>
#include <string.h>
#include "sdr.h"
#include "sensor.h"
#include "sensor_def.h"
#include "plat_ipmb.h"
#include "pal.h"
SDR_INFO sdr_info;
static uint16_t RSV_ID[2] = { 0 };
uint8_t is_SDR_not_init = 1;
SDR_Full_sensor full_sensor_table[MAX_SENSOR_SIZER];
uint8_t SDR_NUM = 0;
void SDR_clear_ID(void)
{
sdr_info.current_ID = sdr_info.start_ID;
return;
}
uint16_t SDR_get_record_ID(uint16_t current_ID)
{
if (current_ID < sdr_info.last_ID) {
return ++current_ID;
} else if (current_ID == sdr_info.last_ID) {
return SDR_END_ID;
}
return SDR_INVALID_ID;
}
uint16_t SDR_check_record_ID(uint16_t current_ID)
{
if (current_ID > sdr_info.last_ID) {
return false;
}
return true;
}
uint16_t SDR_get_RSV_ID(uint8_t rsv_table_index)
{
return (++RSV_ID[rsv_table_index]);
}
bool SDR_RSV_ID_check(uint16_t ID, uint8_t rsv_table_index)
{
return (RSV_ID[rsv_table_index] == ID) ? true : false;
}
uint8_t SDR_init(void)
{
int i;
SDR_NUM = pal_load_sdr_table();
pal_fix_fullSDR_table();
sdr_info.start_ID = 0x0000;
sdr_info.current_ID = sdr_info.start_ID;
for (i = 0; i < SDR_NUM; i++) {
full_sensor_table[i].record_id_h = (i >> 8) & 0xFF;
full_sensor_table[i].record_id_l = (i & 0xFF);
full_sensor_table[i].ID_len += strlen(full_sensor_table[i].ID_str);
full_sensor_table[i].record_len += strlen(full_sensor_table[i].ID_str);
if (DEBUG_SENSOR) {
printf("%s ID: 0x%x%x, size: %d, recordlen: %d\n",
full_sensor_table[i].ID_str, full_sensor_table[i].record_id_h,
full_sensor_table[i].record_id_l, full_sensor_table[i].ID_len,
full_sensor_table[i].record_len);
}
}
i--;
sdr_info.last_ID =
(full_sensor_table[i].record_id_h << 8) | (full_sensor_table[i].record_id_l);
if (DEBUG_SENSOR) {
printf("%s ID: 0x%x%x, size: %d, recordlen: %d\n", full_sensor_table[i].ID_str,
full_sensor_table[i].record_id_h, full_sensor_table[i].record_id_l,
full_sensor_table[i].ID_len, full_sensor_table[i].record_len);
}
is_SDR_not_init = 0;
return true;
}