/*****************************************************************************
Copyright: 2013-2018, ZhiWan Tech. Co., Ltd.
File name:wmm_device.c
Description: 设备参数管理模块
Author: 周涛
Version: 0.0.01
Date: 2022-4-23
History:
*****************************************************************************/

#include "includes.h"

// 定义一个全局变量，保存设备参数
static SAVE_DEVICE_T g_stSaveDeviceParam;

// 模块初始化
void wmm_device_init()
{
    SYS_MEMSET(&g_stSaveDeviceParam, 0, sizeof(SAVE_DEVICE_T));
    wmm_device_set_param_with_default_data();
    return;
}

// 初始化默认参数
void wmm_device_set_param_with_default_data()
{
    uint32 dwProjectId = 12345678;
    char *pbySerialNo = "20230614131415";

    SYS_MEMSET(&g_stSaveDeviceParam, 0, sizeof(SAVE_DEVICE_T));
    SYS_MEMCPY(g_stSaveDeviceParam.abyProjectId, &dwProjectId, 4);
    SYS_MEMCPY(g_stSaveDeviceParam.abySerialNo, pbySerialNo, SYS_STRLEN(pbySerialNo));
}

// 基于flash中的数据配置设备参数
void wmm_device_set_param_with_flash_data(uint8 *pbyData)
{
    SYS_MEMCPY((void *)&g_stSaveDeviceParam, (void *)pbyData, sizeof(SAVE_DEVICE_T));
}

// 向外暴露设备参数，方便其他模块使用参数
SAVE_DEVICE_T *wmm_query_device_param()
{
    return (SAVE_DEVICE_T *)(&g_stSaveDeviceParam);
}

// 配置蓝牙基站名称
// pbyData:蓝牙名称
void wmm_device_set_ble_bts_name(uint8 *pbyData)
{
    SYS_MEMCPY(g_stSaveDeviceParam.abyBleBtsName, pbyData, 28);
    return;
}

// 查询设备参数
// wCommand:  查询命令
// pbyData：当前监控对象
void wmm_query_device(uint16 wCommand, uint8 *pbyData)
{
    LTV_T *pstLtv = (LTV_T *)pbyData;
    uint8 byLen = pstLtv->wLen - 4;   // 净荷长度
    uint8 byDeviceType = DEVICE_TYPE; // 设备类型

    switch (wCommand)
    {
    case ORDER_DEVICE_TYPE: // 设备类型
        SYS_MEMCPY(pstLtv->abyData, &byDeviceType, byLen);
        break;
    case ORDER_DEVICE_SERIAL_NO: // 生产序列号
        SYS_MEMCPY(pstLtv->abyData, g_stSaveDeviceParam.abySerialNo, byLen);
        break;
    case ORDER_DEVICE_MODEL: // 设备型号
        byLen = (uint8)strlen(DEVICE_MODE);
        if (byLen > 20)
        {
            byLen = 20;
        }
        SYS_MEMCPY(pstLtv->abyData, DEVICE_MODE, byLen);
        break;
    case ORDER_DEVICE_MCU_VERSION: // MCU软件版本
        byLen = (uint8)strlen(SOFTWARE_VERSION);
        if (byLen > 20)
        {
            byLen = 20;
        }
        SYS_MEMCPY(pstLtv->abyData, SOFTWARE_VERSION, byLen);
        break;
    case ORDER_DEVICE_PROJECT_ID: // 项目编号
        SYS_MEMCPY(pstLtv->abyData, g_stSaveDeviceParam.abyProjectId, byLen);
        break;
    case ORDER_DEVICE_BLE_BTS_NAME: // 蓝牙基站名称
        SYS_MEMCPY(pstLtv->abyData, g_stSaveDeviceParam.abyBleBtsName, byLen);
        break;
    // case ORDER_DEVICE_WIFI_BTS_NAME:
    //     SYS_MEMCPY(pstLtv->abyData, g_stSaveDeviceParam.abyWifiBtsName, byLen);
    //     break;
    default:
        break;
    }

    return;
}

// 网管设置设备参数
// wCommand:  查询命令，pstLtv：当前监控对象
void wmm_set_device(uint16 wCommand, uint8 *pbyData)
{
    LTV_T *pstLtv = (LTV_T *)pbyData;
    uint8 byLen = pstLtv->wLen - 4; // 净荷长度

    switch (wCommand)
    {
    case ORDER_DEVICE_TYPE: // 设备类型
        break;
    case ORDER_DEVICE_SERIAL_NO: // 生产序列号
        SYS_MEMCPY(g_stSaveDeviceParam.abySerialNo, pstLtv->abyData, byLen);
        break;
    case ORDER_DEVICE_MODEL: // 设备型号
        break;
    case ORDER_DEVICE_MCU_VERSION: // MCU软件版本不可配置
        break;
    case ORDER_DEVICE_PROJECT_ID: // 项目编号
        SYS_MEMCPY(&g_stSaveDeviceParam.abyProjectId, pstLtv->abyData, byLen);
        break;
    case ORDER_DEVICE_BLE_BTS_NAME:
        break;
    // case ORDER_DEVICE_WIFI_BTS_NAME:
    //     break;
    default:
        break;
    }

    return;
}
