Encode1033 generates a complete RTCM 1033 frame (header + payload + CRC).
(desc AntennaDescriptor)
| 32 | |
| 33 | // Encode1033 generates a complete RTCM 1033 frame (header + payload + CRC). |
| 34 | func Encode1033(desc AntennaDescriptor) []byte { |
| 35 | // Build the bit-packed payload. |
| 36 | // RTCM 1033 fields: |
| 37 | // DF002: Message Number (12 bits) = 1033 |
| 38 | // DF003: Reference Station ID (12 bits) |
| 39 | // DF227: Descriptor Counter N (8 bits) |
| 40 | // DF228: Antenna Descriptor (N bytes) |
| 41 | // DF229: Antenna Setup ID (8 bits) |
| 42 | // DF230: Serial Number Counter M (8 bits) |
| 43 | // DF231: Antenna Serial Number (M bytes) |
| 44 | // DF232: Receiver Type Counter I (8 bits) |
| 45 | // DF233: Receiver Type (I bytes) |
| 46 | // DF234: Firmware Counter J (8 bits) |
| 47 | // DF235: Receiver Firmware (J bytes) |
| 48 | // DF236: Serial Counter K (8 bits) |
| 49 | // DF237: Receiver Serial (K bytes) |
| 50 | |
| 51 | payloadSize := 3 + // 12+12 bits = 24 bits = 3 bytes for msg number + station ID |
| 52 | 1 + len(desc.AntennaType) + |
| 53 | 1 + // setup ID |
| 54 | 1 + len(desc.AntennaSerial) + |
| 55 | 1 + len(desc.ReceiverType) + |
| 56 | 1 + len(desc.ReceiverFW) + |
| 57 | 1 + len(desc.ReceiverSerial) |
| 58 | |
| 59 | payload := make([]byte, payloadSize) |
| 60 | offset := 0 |
| 61 | |
| 62 | // DF002 (12 bits) + DF003 (12 bits) = 24 bits = 3 bytes |
| 63 | // Message number 1033 = 0x409 in upper 12 bits |
| 64 | // Station ID in lower 12 bits |
| 65 | val := (uint32(1033) << 12) | uint32(desc.StationID&0x0FFF) |
| 66 | payload[0] = byte((val >> 16) & 0xFF) |
| 67 | payload[1] = byte((val >> 8) & 0xFF) |
| 68 | payload[2] = byte(val & 0xFF) |
| 69 | offset = 3 |
| 70 | |
| 71 | // Antenna descriptor |
| 72 | payload[offset] = byte(len(desc.AntennaType) & 0xFF) |
| 73 | offset++ |
| 74 | copy(payload[offset:], desc.AntennaType) |
| 75 | offset += len(desc.AntennaType) |
| 76 | |
| 77 | // Antenna setup ID |
| 78 | payload[offset] = desc.AntennaSetupID |
| 79 | offset++ |
| 80 | |
| 81 | // Antenna serial number |
| 82 | payload[offset] = byte(len(desc.AntennaSerial) & 0xFF) |
| 83 | offset++ |
| 84 | copy(payload[offset:], desc.AntennaSerial) |
| 85 | offset += len(desc.AntennaSerial) |
| 86 | |
| 87 | // Receiver type |
| 88 | payload[offset] = byte(len(desc.ReceiverType) & 0xFF) |
| 89 | offset++ |
| 90 | copy(payload[offset:], desc.ReceiverType) |
| 91 | offset += len(desc.ReceiverType) |
searching dependent graphs…