mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	Services/UDS: Set the proper bit in the ConnectionStatus structure when creating a network. (#2738)
* Services/UDS: Set the proper bit in the ConnectionStatus structure when creating a network. This lets the application know that the host was successfully added to the session. * Services/UDS: Reset the connection status when destroying the network * Services/UDS: Reset the connection status's bitmask of changed nodes after reporting it to the game.
This commit is contained in:
		
							parent
							
								
									791cd14c8d
								
							
						
					
					
						commit
						ac168eeb5d
					
				| @ -215,6 +215,11 @@ static void GetConnectionStatus(Interface* self) { | |||||||
|     rb.Push(RESULT_SUCCESS); |     rb.Push(RESULT_SUCCESS); | ||||||
|     rb.PushRaw(connection_status); |     rb.PushRaw(connection_status); | ||||||
| 
 | 
 | ||||||
|  |     // Reset the bitmask of changed nodes after each call to this
 | ||||||
|  |     // function to prevent falsely informing games of outstanding
 | ||||||
|  |     // changes in subsequent calls.
 | ||||||
|  |     connection_status.changed_nodes = 0; | ||||||
|  | 
 | ||||||
|     LOG_DEBUG(Service_NWM, "called"); |     LOG_DEBUG(Service_NWM, "called"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -314,8 +319,11 @@ static void BeginHostingNetwork(Interface* self) { | |||||||
|     // The host is always the first node
 |     // The host is always the first node
 | ||||||
|     connection_status.network_node_id = 1; |     connection_status.network_node_id = 1; | ||||||
|     node_info[0].network_node_id = 1; |     node_info[0].network_node_id = 1; | ||||||
|  |     connection_status.nodes[0] = connection_status.network_node_id; | ||||||
|     // Set the bit 0 in the nodes bitmask to indicate that node 1 is already taken.
 |     // Set the bit 0 in the nodes bitmask to indicate that node 1 is already taken.
 | ||||||
|     connection_status.node_bitmask |= 1; |     connection_status.node_bitmask |= 1; | ||||||
|  |     // Notify the application that the first node was set.
 | ||||||
|  |     connection_status.changed_nodes |= 1; | ||||||
| 
 | 
 | ||||||
|     // If the game has a preferred channel, use that instead.
 |     // If the game has a preferred channel, use that instead.
 | ||||||
|     if (network_info.channel != 0) |     if (network_info.channel != 0) | ||||||
| @ -352,6 +360,8 @@ static void DestroyNetwork(Interface* self) { | |||||||
|     // Unschedule the beacon broadcast event.
 |     // Unschedule the beacon broadcast event.
 | ||||||
|     CoreTiming::UnscheduleEvent(beacon_broadcast_event, 0); |     CoreTiming::UnscheduleEvent(beacon_broadcast_event, 0); | ||||||
| 
 | 
 | ||||||
|  |     // TODO(Subv): Check if connection_status is indeed reset after this call.
 | ||||||
|  |     connection_status = {}; | ||||||
|     connection_status.status = static_cast<u8>(NetworkStatus::NotConnected); |     connection_status.status = static_cast<u8>(NetworkStatus::NotConnected); | ||||||
|     connection_status_event->Signal(); |     connection_status_event->Signal(); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -24,6 +24,9 @@ const double MillisecondsPerTU = 1.024; | |||||||
| // Interval measured in TU, the default value is 100TU = 102.4ms
 | // Interval measured in TU, the default value is 100TU = 102.4ms
 | ||||||
| const u16 DefaultBeaconInterval = 100; | const u16 DefaultBeaconInterval = 100; | ||||||
| 
 | 
 | ||||||
|  | /// The maximum number of nodes that can exist in an UDS session.
 | ||||||
|  | constexpr u32 UDSMaxNodes = 16; | ||||||
|  | 
 | ||||||
| struct NodeInfo { | struct NodeInfo { | ||||||
|     u64_le friend_code_seed; |     u64_le friend_code_seed; | ||||||
|     std::array<u16_le, 10> username; |     std::array<u16_le, 10> username; | ||||||
| @ -47,8 +50,8 @@ struct ConnectionStatus { | |||||||
|     u32_le status; |     u32_le status; | ||||||
|     INSERT_PADDING_WORDS(1); |     INSERT_PADDING_WORDS(1); | ||||||
|     u16_le network_node_id; |     u16_le network_node_id; | ||||||
|     INSERT_PADDING_BYTES(2); |     u16_le changed_nodes; | ||||||
|     INSERT_PADDING_BYTES(32); |     u16_le nodes[UDSMaxNodes]; | ||||||
|     u8 total_nodes; |     u8 total_nodes; | ||||||
|     u8 max_nodes; |     u8 max_nodes; | ||||||
|     u16_le node_bitmask; |     u16_le node_bitmask; | ||||||
|  | |||||||
| @ -15,9 +15,6 @@ namespace Service { | |||||||
| namespace NWM { | namespace NWM { | ||||||
| 
 | 
 | ||||||
| using MacAddress = std::array<u8, 6>; | using MacAddress = std::array<u8, 6>; | ||||||
| 
 |  | ||||||
| /// The maximum number of nodes that can exist in an UDS session.
 |  | ||||||
| constexpr u32 UDSMaxNodes = 16; |  | ||||||
| constexpr std::array<u8, 3> NintendoOUI = {0x00, 0x1F, 0x32}; | constexpr std::array<u8, 3> NintendoOUI = {0x00, 0x1F, 0x32}; | ||||||
| 
 | 
 | ||||||
| /// Additional block tag ids in the Beacon frames
 | /// Additional block tag ids in the Beacon frames
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Sebastian Valle
						Sebastian Valle