123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- package upgrade
- import (
- "bytes"
- "encoding/binary"
- "ipsomc/module/ps/psdl"
- "ipsomc/module/ps/psmodel"
- "ipsomc/module/ps/pspublic"
- "ipsomc/module/uploadfile/uploadfilemodel"
- "ipsomc/public"
- )
- var (
- Gupgrade_stManageParam OAM_UPGRADE_T
- Gupgrade_abyFileData []byte
- )
- type Upgrade struct {
- psDlApi psdl.PsDl
- }
- type OAM_UPGRADE_T struct {
- UpgradeStatus uint8 `json:"upgrade_status"`
- FileSize uint32 `json:"file_size"`
- TotalTimes uint32 `json:"total_times"`
- SendingTimes uint32 `json:"sending_times"`
- RemainderLen uint32 `json:"remainder_len"`
- }
- func (obj *Upgrade) UpgradeReceiveFile(dataModel *uploadfilemodel.UploadFileParam, dataList []byte, dwLen uint32) error {
- fileSize := dwLen
-
- remainderLen := fileSize % 4
- if remainderLen > 0 {
- fileSize = fileSize + 4 - remainderLen
- }
- Gupgrade_stManageParam.FileSize = fileSize
-
- Gupgrade_abyFileData = make([]byte, fileSize)
- copy(Gupgrade_abyFileData, dataList)
-
- totalTimes := fileSize / psmodel.PS_MCP_B_DATA_LEN
- remainderLen = fileSize % psmodel.PS_MCP_B_DATA_LEN
- if remainderLen > 0 {
- Gupgrade_stManageParam.TotalTimes = totalTimes + 1
- Gupgrade_stManageParam.RemainderLen = remainderLen
- } else {
- Gupgrade_stManageParam.TotalTimes = totalTimes
- Gupgrade_stManageParam.RemainderLen = psmodel.PS_MCP_B_DATA_LEN
- }
-
- if err := obj.UpgradeSwitchSoftMode(dataModel, 1); err != nil {
- return err
- }
- return nil
- }
- func (obj *Upgrade) UpgradeOrganizeLtv(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)
- }
- func (obj *Upgrade) UpgradeSwitchSoftMode(dataModel *uploadfilemodel.UploadFileParam, upgradeStatus uint8) error {
- var dataList bytes.Buffer
- tmpBytes := make([]byte, 1)
-
- tmpBytes = append(tmpBytes, upgradeStatus)
- obj.UpgradeOrganizeLtv(5, uint16(pspublic.OAM_UPGRADE_SWITCH_SOFT_WORK_MODE), tmpBytes, &dataList)
-
- if err := obj.psDlApi.PsDlSendOamDataToBts(int(dataModel.ProjectID), dataModel.BtsID, psmodel.MCP_B, psmodel.MCP_B_CONTROL, dataList.Bytes()); err != nil {
- obj.UpgradeDeinit()
- return err
- }
- Gupgrade_stManageParam.UpgradeStatus = 1
- Gupgrade_stManageParam.SendingTimes = 0
- return nil
- }
- func (obj *Upgrade) UpgradeNoticeFileSize(ProjectID int, BtsID int) error {
- var dataList bytes.Buffer
- tmpBytes := make([]byte, 4)
-
- binary.LittleEndian.PutUint32(tmpBytes, Gupgrade_stManageParam.FileSize)
- obj.UpgradeOrganizeLtv(8, uint16(pspublic.OAM_UPGRADE_NOTICE_FILE_SIZE_), tmpBytes, &dataList)
-
- if err := obj.psDlApi.PsDlSendOamDataToBts(ProjectID, BtsID, psmodel.MCP_B, psmodel.MCP_B_CONTROL, dataList.Bytes()); err != nil {
- obj.UpgradeDeinit()
- return err
- }
- return nil
- }
- func (obj *Upgrade) UpgradeTransferFile(ProjectID int, BtsID int) error {
- var payloadLen uint32 = psmodel.PS_MCP_B_DATA_LEN
- var dwStartIndex uint32 = 0
- var dwStopIndex uint32 = 0
- var dataList bytes.Buffer
- var dwLen uint32 = 0
- var stUpgradeStatus public.PublicUpgradeStatus
- if Gupgrade_stManageParam.SendingTimes < Gupgrade_stManageParam.TotalTimes {
- if Gupgrade_stManageParam.SendingTimes == (Gupgrade_stManageParam.TotalTimes - 1) {
- payloadLen = Gupgrade_stManageParam.RemainderLen
- }
- payload := make([]byte, payloadLen)
-
- dwStartIndex = Gupgrade_stManageParam.SendingTimes * psmodel.PS_MCP_B_DATA_LEN
- dwStopIndex = dwStartIndex + payloadLen
- copy(payload, Gupgrade_abyFileData[dwStartIndex:dwStopIndex])
- Gupgrade_stManageParam.SendingTimes++
-
- dwLen = 8 + payloadLen
- binary.Write(&dataList, binary.LittleEndian, uint16(dwLen))
- binary.Write(&dataList, binary.LittleEndian, uint16(pspublic.OAM_UPGRADE_SEND_UPGRADE_FILE))
- binary.Write(&dataList, binary.LittleEndian, Gupgrade_stManageParam.SendingTimes)
- binary.Write(&dataList, binary.LittleEndian, payload)
-
- if err := obj.psDlApi.PsDlSendOamDataToBts(ProjectID, BtsID, psmodel.MCP_B, psmodel.MCP_B_FILE_TRANSFER, dataList.Bytes()); err != nil {
- obj.UpgradeDeinit()
- stUpgradeStatus.Flag = 1
- stUpgradeStatus.Percent = 0
- public.Gpub_chanWebSocketMsg <- stUpgradeStatus
- return err
- }
- stUpgradeStatus.Flag = 2
- stUpgradeStatus.Percent = uint8((Gupgrade_stManageParam.SendingTimes * 100) / Gupgrade_stManageParam.TotalTimes)
- public.Gpub_chanWebSocketMsg <- stUpgradeStatus
- } else {
-
- if err := obj.UpgradeNoticeOver(ProjectID, BtsID); err != nil {
- obj.UpgradeDeinit()
- stUpgradeStatus.Flag = 1
- stUpgradeStatus.Percent = 0
- public.Gpub_chanWebSocketMsg <- stUpgradeStatus
- return err
- }
- obj.UpgradeDeinit()
- }
- return nil
- }
- func (obj *Upgrade) UpgradeNoticeOver(ProjectID int, BtsID int) error {
- var dataList bytes.Buffer
- tmpBytes := make([]byte, 4)
-
- binary.LittleEndian.PutUint32(tmpBytes, Gupgrade_stManageParam.FileSize)
- obj.UpgradeOrganizeLtv(8, uint16(pspublic.OAM_UPGRADE_NOTICE_UPGRADE_OVER), tmpBytes, &dataList)
-
- if err := obj.psDlApi.PsDlSendOamDataToBts(ProjectID, BtsID, psmodel.MCP_B, psmodel.MCP_B_CONTROL, dataList.Bytes()); err != nil {
- obj.UpgradeDeinit()
- return err
- }
- obj.UpgradeDeinit()
- return nil
- }
- func (obj *Upgrade) UpgradeSuccess() {
- obj.UpgradeDeinit()
- }
- func (obj *Upgrade) UpgradeDeinit() {
- Gupgrade_stManageParam = OAM_UPGRADE_T{}
- }
|