Wiki › Messages › SRM and SSM: the request and the answer in signal priority

Updated 2026-10-09

What they are and who sends them

The Signal Request Message (SRM, DSRCmsgID 29) is sent by a vehicle that wants the traffic signal to favor it: a transit bus running late, a snow plow on a route, a freight truck that should not have to stop, an ambulance on a call. It names the intersection, the lane it will arrive on and leave by, when it expects to be there, and who it is. The Signal Status Message (SSM, DSRCmsgID 30) is the roadside's reply: for each active request at the intersection it echoes the requester and says whether the request is granted, rejected, processing or something else. The messages are a conversation; the rest of the system, from the priority request server to the controller's priority logic, is described in signal priority. This article is about the bytes.

When they are broadcast

PropertySRMSSM
SenderVehicle OBURSU, on behalf of the priority request server or controller
RateOnce per second while approaching, or on change; J2945/B gives the rulesOnce per second while any request is active, or on change
PSID0xE0000016 (p-encoded E0000016)0xE0000015 (p-encoded E0000015)
SigningSigned with a certificate whose PSID 0xE0000016 and service-specific permissions (SSP) authorize the vehicle's role; an RSU checks the SSP before honoring a requestSigned with the RSU's 0xE0000015 application certificate
Size50 to 120 bytes30 to 80 bytes

SRM structure

FieldMeaningUnits and rangeTypical valueWhere it comes from
timeStampMinute of the yearoptional403680OBU clock
secondMilliseconds in the minute when the SRM was built0 … 5999945000OBU clock
sequenceNumberIncrements per SRM from this vehicle0 … 1271OBU
requests[].request.idIntersection region and id; must match the MAP and SPaTregion 0, id 1201from the MAP the vehicle heard
requests[].request.requestIDChosen by the vehicle; echoed in the SSM0 … 2557OBU
requests[].request.requestTypepriorityRequest (new), priorityRequestUpdate (changed arrival time), priorityCancellationenumpriorityRequestOBU logic
requests[].request.inBoundLaneCHOICE lane (MAP laneID), approach (ApproachID) or connection (LaneConnectionID)lane 3matched from the MAP
requests[].request.outBoundLaneSame choice for the exitoptionallane 4matched from the MAP
requests[].minute, secondExpected time of arrival at the stop lineminute of year + ms403680, 45000OBU estimate
requests[].durationHow long service is wantedms20000OBU estimate
requestor.idCHOICE entityID (4-byte TemporaryID) or stationIDentityID BEEF0001OBU
requestor.type.roleBasicVehicleRole: transit, truck, emergency, police, fire, ambulance, roadWork, dot, safetyCar…enumtransitvehicle configuration
requestor.type.subroleAgency-defined refinement, requestSubRole1 … 14enumrequestSubRole1agency policy
requestor.type.requestImportance, requestImportanceLevel1 … 14enumrequestImportanceLevel3agency policy
requestor.type.hpmsTypeVehicleType: bus, car, axleCnt5Trailer…enumbusvehicle configuration
requestor.positionposition (lat, long, elevation), heading (1.5° units), speed (transmisson and speed in 0.02 m/s)GNSS
requestor.name, routeNameVehicle and route labelsup to 63 chars"Metrobus 28A", "28A"transit CAD
requestor.transitStatus8-bit: loading, anADAuse, aBikeLoad, doorOpen, charging, atStopLinebit string00000000vehicle
requestor.transitOccupancyoccupancyEmpty … occupancyFullenumoccupancyMedpassenger counter
requestor.transitScheduleSeconds ahead (+) or behind (−) schedule in 10 s units−122 … 121−3 (30 s late)transit CAD

The spelling transmisson inside TransmissionAndSpeed is the standard's, not a typo in the portal.

SSM structure

FieldMeaningUnits and rangeTypical value
timeStamp, second, sequenceNumberAs in the SRM, for the SSM itself403680, 45500, 1
status[].sequenceNumberPer-intersection counter0 … 1271
status[].idThe intersectionregion, id0, 1201
status[].sigStatus[]One package per active request1 … 32
sigStatus[].requester.id, request, sequenceNumberEcho of the SRM's requestor.id, requestID and sequenceNumber so the vehicle can match the replyBEEF0001, 7, 1
sigStatus[].requester.role, typeDataEcho of the requester's role and typeoptionaltransit
sigStatus[].inboundOn, outboundOnEcho of the laneslane 3, lane 4
sigStatus[].minute, second, durationEcho of the requested service timeoptional
sigStatus[].statusPrioritizationResponseStatus: unknown, requested, processing, watchOtherTraffic, granted, rejected, maxPresence, reserviceLockedenumgranted

maxPresence means the vehicle has been asking too long and the controller will not extend further; reserviceLocked means the same vehicle was just served and must wait; watchOtherTraffic is a grant with a caution that conflicting priority is also being served.

How to create a pair in this portal

  1. Open the creator and load SRM. The template is a late Metrobus on route 28A approaching intersection 1201 northbound on lane 3, leaving by lane 4, asking for 20 seconds of service.
  2. Set request.id.id to your intersection and inBoundLane/outBoundLane to lane IDs from your MAP (load the MAP template to see them). Set minute and second to the expected arrival. Set the role and importance that your agency's policy assigns; the ? help lists the enumerations.
  3. Encode / Validate. The hex begins 001D (messageId 29). The map shows the requestor's position and the intersection.
  4. Load SSM. Copy the SRM's requestor.id.entityID, requestID and sequenceNumber into sigStatus[0].requester, mirror the lanes and times, and set status. Encode; the hex begins 001E (messageId 30).
  5. Decode both in the decoder and confirm the summary links the SSM to the SRM. In the live view, a vehicle with an outstanding request shows its state (requested, granted, rejected) on the intersection marker.
  6. For a bench test, push the SSM on PSID 0xE0000015 from the RSU to see an OBU display the grant. SRMs are vehicle messages; push one on 0xE0000016 only to exercise a priority request server with a synthetic vehicle.

How to read a decoded one

  • The SRM's request.id must match the intersection the vehicle is actually approaching; a wrong ID is silently ignored by the server.
  • inBoundLane must be a lane that exists in the current MAP with a connectsTo; a request on an egress lane or a crosswalk lane is rejected.
  • minute and second should be a few seconds to a minute in the future; an arrival in the past is a stale or replayed request.
  • In the SSM, requester.id, request and sequenceNumber must equal the SRM's; if the server regenerates requestID the vehicle cannot match the answer.
  • A status that stays requested or processing for many seconds usually means the controller side (NTCIP 1211 or the vendor priority server) never received the call; see the troubleshooting table in signal priority.
  • Check the SSM's second against the SRM's: a reply more than a second or two later points at a slow server path.
  • SAE J2735_202409, SignalRequestMessage and SignalStatusMessage modules; SAE J2945/B, requirements for signal priority and preemption applications; NTCIP 1211 for the controller-side request and status model.
  • Signal priority, MAP, SPaT, MAP to SPaT, SCMS for the certificate permissions a requester needs.