123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386 |
- // OAM模块-基站参数
- // 秒寻科技
- // zt 2024-10-2
- package bparamoam
- import (
- "bytes"
- "encoding/binary"
- "ipsomc/module/bparam/bparammodel"
- "ipsomc/module/oam"
- "ipsomc/module/ps/psdl"
- "ipsomc/module/ps/psmodel"
- "ipsomc/util"
- )
- type BparamOam struct {
- psDlApi psdl.PsDl
- }
- // 组织查询LTV-A数据结构
- func (obj *BparamOam) OamOrganizeQueryLtvA(wLen uint16, wCmd uint16, dataList *bytes.Buffer) {
- dataLen := wLen - 4
- binary.Write(dataList, binary.LittleEndian, wLen) //长度
- binary.Write(dataList, binary.LittleEndian, wCmd) //命令
- binary.Write(dataList, binary.LittleEndian, make([]byte, dataLen)) //数据
- }
- // 组织设置LTV-A数据结构
- func (obj *BparamOam) OamOrganizeSetLtvA(wLen uint16, wCmd uint16, value []byte, dataList *bytes.Buffer) {
- dataLen := wLen - 4
- tmpSlice := make([]byte, dataLen) //定义该命令所需的数据切片
- copy(tmpSlice, value)
- binary.Write(dataList, binary.LittleEndian, wLen) //长度
- binary.Write(dataList, binary.LittleEndian, wCmd) //命令
- binary.Write(dataList, binary.LittleEndian, tmpSlice) //数据
- }
- // 查询基站设备参数
- // dataModel:基站参数
- func (obj *BparamOam) OamQueryDeviceParam(dataModel *bparammodel.BtsBaseParam) error {
- ////组织查询参数数据
- var dataList bytes.Buffer
- zeroBuffer := make([]byte, 20)
- //设备类型
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_DEVICE_TYPE), &dataList)
- //设备序列号
- binary.Write(&dataList, binary.LittleEndian, uint16(24)) //长度
- binary.Write(&dataList, binary.LittleEndian, uint16(oam.ORDER_DEVICE_SERIAL_NO)) //命令
- binary.Write(&dataList, binary.LittleEndian, zeroBuffer) //数据
- //设备型号
- binary.Write(&dataList, binary.LittleEndian, uint16(24)) //长度
- binary.Write(&dataList, binary.LittleEndian, uint16(oam.ORDER_DEVICE_MODEL)) //命令
- binary.Write(&dataList, binary.LittleEndian, zeroBuffer) //数据
- //软件版本
- binary.Write(&dataList, binary.LittleEndian, uint16(24)) //长度
- binary.Write(&dataList, binary.LittleEndian, uint16(oam.ORDER_DEVICE_MCU_VERSION)) //命令
- binary.Write(&dataList, binary.LittleEndian, zeroBuffer) //数据
- //蓝牙名称
- binary.Write(&dataList, binary.LittleEndian, uint16(32)) //长度
- binary.Write(&dataList, binary.LittleEndian, uint16(oam.ORDER_DEVICE_BLE_BTS_NAME)) //命令
- binary.Write(&dataList, binary.LittleEndian, make([]byte, 28)) //数据
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_QUERY, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 查询基站网管参数
- // dataModel:基站参数
- func (obj *BparamOam) OamQueryNetworkParam(dataModel *bparammodel.BtsBaseParam) error {
- var dataList bytes.Buffer
- ////组织查询参数
- obj.OamOrganizeQueryLtvA(24, uint16(oam.ORDER_NETWORK_WIFI_NAME), &dataList) //wifi名称
- obj.OamOrganizeQueryLtvA(24, uint16(oam.ORDER_NETWORK_WIFI_PWD), &dataList) //wifi密码
- obj.OamOrganizeQueryLtvA(36, uint16(oam.ORDER_NETWORK_SERVICE_IP), &dataList) //管理中心IP
- obj.OamOrganizeQueryLtvA(6, uint16(oam.ORDER_NETWORK_SERVICE_PORT), &dataList) //管理中心端口
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_NETWORK_SWITCH), &dataList) //管理中心使能
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_QUERY, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 设置基站网管参数
- // dataModel:基站参数
- func (obj *BparamOam) OamSetNetworkParam(dataModel *bparammodel.BtsBaseParam) error {
- var dataList bytes.Buffer
- tmpBytes := make([]byte, 32)
- ////组织查询参数
- tmpBytes = []byte(dataModel.WifiName)
- obj.OamOrganizeSetLtvA(24, uint16(oam.ORDER_NETWORK_WIFI_NAME), tmpBytes, &dataList) //wifi名称
- tmpBytes = []byte(dataModel.WifiPwd)
- obj.OamOrganizeSetLtvA(24, uint16(oam.ORDER_NETWORK_WIFI_PWD), tmpBytes, &dataList) //wifi密码
- tmpBytes = []byte(dataModel.ServiceIP)
- obj.OamOrganizeSetLtvA(36, uint16(oam.ORDER_NETWORK_SERVICE_IP), tmpBytes, &dataList) //管理中心IP
- binary.LittleEndian.PutUint16(tmpBytes, uint16(dataModel.ServicePort))
- obj.OamOrganizeSetLtvA(6, uint16(oam.ORDER_NETWORK_SERVICE_PORT), tmpBytes, &dataList) //管理中心端口
- tmpBytes = []byte{dataModel.NetworkSwitch}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_NETWORK_SWITCH), tmpBytes, &dataList) //管理中心使能
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_CONFIGURE, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 查询基站同步参数
- // dataModel:基站参数
- func (obj *BparamOam) OamQuerySyncParam(dataModel *bparammodel.BtsBaseParam) error {
- var dataList bytes.Buffer
- ////组织查询参数
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_SYNC_CENTER_FREQ), &dataList) //中心频率
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_SYNC_TX_POWER), &dataList) //发射功率
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_SYNC_RSSI), &dataList) //接收电平
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_QUERY, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 设置基站同步参数
- // dataModel:基站参数
- func (obj *BparamOam) OamSetSyncParam(dataModel *bparammodel.BtsBaseParam) error {
- var dataList bytes.Buffer
- tmpBytes := make([]byte, 1)
- ////组织参数
- tmpBytes = []byte{byte(dataModel.CenterFreq)}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_SYNC_CENTER_FREQ), tmpBytes, &dataList)
- tmpBytes = []byte{byte(dataModel.TxPower)}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_SYNC_TX_POWER), tmpBytes, &dataList) //发射功率
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_CONFIGURE, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 查询基站增益参数
- // dataModel:基站参数
- func (obj *BparamOam) OamQueryGainParam(dataModel *bparammodel.BtsDeviceParam) error {
- var dataList bytes.Buffer
- ////组织查询参数
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_CONFIG_DAC_SWITCH), &dataList) //中心频率
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_CONFIG_DAC_GAIN), &dataList) //发射功率
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_CONFIG_PA_SWITCH), &dataList) //中心频率
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_CONFIG_PA_GAIN), &dataList) //发射功率
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_QUERY, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 设置基站增益参数
- // dataModel:基站参数
- func (obj *BparamOam) OamSetGainParam(dataModel *bparammodel.BtsBaseParam) error {
- var dataList bytes.Buffer
- tmpBytes := make([]byte, 32)
- ////组织参数
- tmpBytes = []byte{byte(dataModel.DaSwitch)}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_CONFIG_DAC_SWITCH), tmpBytes, &dataList)
- tmpBytes = []byte{byte(dataModel.DaGain)}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_CONFIG_DAC_GAIN), tmpBytes, &dataList)
- tmpBytes = []byte{byte(dataModel.PaSwitch)}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_CONFIG_PA_SWITCH), tmpBytes, &dataList)
- tmpBytes = []byte{byte(dataModel.PaGain)}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_CONFIG_PA_GAIN), tmpBytes, &dataList)
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_CONFIGURE, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 查询安装参数
- // dataModel:基站参数
- func (obj *BparamOam) OamQueryInstallParam(dataModel *bparammodel.BtsDeviceParam) error {
- var dataList bytes.Buffer
- ////组织查询参数
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_INSTALL_BUILD_ID), &dataList) //
- obj.OamOrganizeQueryLtvA(6, uint16(oam.ORDER_INSTALL_LAYER_ID), &dataList) //
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_INSTALL_LAYER_BLOCK_ID), &dataList) //
- obj.OamOrganizeQueryLtvA(36, uint16(oam.ORDER_INSTALL_LAYER_BLOCK_DESC), &dataList) //
- obj.OamOrganizeQueryLtvA(36, uint16(oam.ORDER_INSTALL_LAYER_POSITION), &dataList) //
- obj.OamOrganizeQueryLtvA(8, uint16(oam.ORDER_INSTALL_LAYER_COORD_X), &dataList) //
- obj.OamOrganizeQueryLtvA(8, uint16(oam.ORDER_INSTALL_LAYER_COORD_Y), &dataList) //
- obj.OamOrganizeQueryLtvA(8, uint16(oam.ORDER_INSTALL_LAYER_COORD_Z), &dataList) //
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_QUERY, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 设置安装参数
- // dataModel:基站参数
- func (obj *BparamOam) OamSetInstallParam(dataModel *bparammodel.BtsBaseParam) error {
- var dataList bytes.Buffer
- tmpBytes := make([]byte, 32)
- ////组织参数
- tmpBytes = []byte{byte(dataModel.BuildID)}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_INSTALL_BUILD_ID), tmpBytes, &dataList)
- layerBytes := make([]byte, 2)
- binary.LittleEndian.PutUint16(layerBytes, uint16(dataModel.LayerID))
- obj.OamOrganizeSetLtvA(6, uint16(oam.ORDER_INSTALL_LAYER_ID), layerBytes, &dataList)
- tmpBytes = []byte{byte(dataModel.BlockID)}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_INSTALL_LAYER_BLOCK_ID), tmpBytes, &dataList)
- tmpBytes = []byte(dataModel.BlockDesc) //UTF-8编码
- blockDesc, _ := util.CharTransUtf8ToGb(tmpBytes)
- obj.OamOrganizeSetLtvA(36, uint16(oam.ORDER_INSTALL_LAYER_BLOCK_DESC), blockDesc, &dataList)
- tmpBytes = []byte(dataModel.Position)
- position, _ := util.CharTransUtf8ToGb(tmpBytes)
- obj.OamOrganizeSetLtvA(36, uint16(oam.ORDER_INSTALL_LAYER_POSITION), position, &dataList)
- binary.LittleEndian.PutUint32(tmpBytes, uint32(dataModel.CoordX))
- obj.OamOrganizeSetLtvA(8, uint16(oam.ORDER_INSTALL_LAYER_COORD_X), tmpBytes, &dataList)
- binary.LittleEndian.PutUint32(tmpBytes, uint32(dataModel.CoordY))
- obj.OamOrganizeSetLtvA(8, uint16(oam.ORDER_INSTALL_LAYER_COORD_Y), tmpBytes, &dataList)
- binary.LittleEndian.PutUint32(tmpBytes, uint32(dataModel.CoordZ))
- obj.OamOrganizeSetLtvA(8, uint16(oam.ORDER_INSTALL_LAYER_COORD_Z), tmpBytes, &dataList)
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_CONFIGURE, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 查询基站参数
- // dataModel:基站参数
- func (obj *BparamOam) OamQueryBtsParam(dataModel *bparammodel.BtsDeviceParam) error {
- var dataList bytes.Buffer
- ////组织查询参数
- obj.OamOrganizeQueryLtvA(8, uint16(oam.ORDER_BTS_ID), &dataList) //基站ID
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_BTS_CARRIER_ID), &dataList) //载波ID
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_BTS_TIMESLOT), &dataList) //时隙ID
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_QUERY, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 设置基站参数
- // dataModel:基站参数
- func (obj *BparamOam) OamSetBtsParam(dataModel *bparammodel.BtsBaseParam) error {
- var dataList bytes.Buffer
- tmpBytes := make([]byte, 32)
- ////组织参数
- binary.LittleEndian.PutUint32(tmpBytes, uint32(dataModel.BtsID))
- obj.OamOrganizeSetLtvA(8, uint16(oam.ORDER_BTS_ID), tmpBytes, &dataList)
- tmpBytes = []byte{byte(dataModel.CarrierID)}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_BTS_CARRIER_ID), tmpBytes, &dataList)
- tmpBytes = []byte{byte(dataModel.Timeslot)}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_BTS_TIMESLOT), tmpBytes, &dataList)
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_CONFIGURE, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 查询定位类型参数
- // dataModel:基站参数
- func (obj *BparamOam) OamQueryLocationTypeParam(dataModel *bparammodel.BtsDeviceParam) error {
- var dataList bytes.Buffer
- ////组织查询参数
- obj.OamOrganizeQueryLtvA(5, uint16(oam.ORDER_INSTALL_LAYER_LOCATION_TYPE), &dataList) //定位类型
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_QUERY, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 设置定位类型参数
- // dataModel:基站参数
- func (obj *BparamOam) OamSetLocationTypeParam(dataModel *bparammodel.BtsBaseParam) error {
- var dataList bytes.Buffer
- ////组织参数
- tmpBytes := []byte{byte(dataModel.LocationType)}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_INSTALL_LAYER_LOCATION_TYPE), tmpBytes, &dataList)
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_CONFIGURE, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 保存参数
- // dataModel:基站参数
- func (obj *BparamOam) OamSaveParam(dataModel *bparammodel.BtsBaseParam) error {
- var dataList bytes.Buffer
- ////组织参数
- tmpBytes := []byte{dataModel.SaveParam}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_CONFIG_SAVE), tmpBytes, &dataList)
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_CONFIGURE, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
- // 设备复位
- // dataModel:基站参数
- func (obj *BparamOam) OamResetBts(dataModel *bparammodel.BtsBaseParam) error {
- var dataList bytes.Buffer
- ////组织参数
- tmpBytes := []byte{byte(dataModel.ResetBts)}
- obj.OamOrganizeSetLtvA(5, uint16(oam.ORDER_CONFIG_RESET), tmpBytes, &dataList)
- //发送数据给基站
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_A, psmodel.MCP_A_CONFIGURE, dataList.Bytes()); err != nil {
- return err
- }
- return nil
- }
|