sylveos

Toy Operating System
Log | Files | Refs

nrf.zig (1951B)


      1 const std = @import("std");
      2 const shared = @import("shared");
      3 const pi = @import("pi");
      4 
      5 const nrf = pi.devices.nrf;
      6 const uart = pi.devices.mini_uart;
      7 
      8 // Server:
      9 // CS - 8
     10 // CE - 6
     11 //
     12 // Client:
     13 // CS - 7
     14 // CE - 5
     15 pub fn main() !void {
     16     uart.print("creating client/server\n", .{});
     17 
     18     const client_addr = 0xE5E5E5E5E5;
     19     // const server_addr = 0xD5D5D5;
     20 
     21     var client_dev: nrf.Device = try .init(.{
     22         .spi_config = .{
     23             .chip_select = .@"1",
     24             .pins = .Lower,
     25         },
     26         .ce_pin = 5,
     27         .int_pin = 22,
     28         .payload_size = 4,
     29     });
     30     uart.print("initialized client\n", .{});
     31 
     32     var server_dev: nrf.Device = try .init(.{
     33         .spi_config = .{
     34             .chip_select = .@"0",
     35             .pins = .Lower,
     36         },
     37         .ce_pin = 6,
     38         .int_pin = 23,
     39         .payload_size = 4,
     40     });
     41     uart.print("initialized server\n", .{});
     42 
     43     uart.print("running tests\n", .{});
     44     server_dev.set_tx_addr(client_addr);
     45     try server_dev.set_rx_addr(0, client_addr);
     46     try client_dev.set_rx_addr(0, client_addr);
     47     client_dev.connect();
     48 
     49     for (0..1000) |i| {
     50         uart.print("trial {}: ", .{i});
     51 
     52         {
     53             var buffer: [4]u8 = undefined;
     54             std.mem.writeInt(u32, &buffer, i, .little);
     55             if (!try server_dev.transmit(&buffer, 128)) {
     56                 uart.print("server failed to transmit\n", .{});
     57                 continue;
     58             }
     59         }
     60 
     61         {
     62             var buffer: [4]u8 = undefined;
     63             if (try client_dev.receive(&buffer) > 0) {
     64                 const x = std.mem.readInt(u32, &buffer, .little);
     65 
     66                 if (x == i) {
     67                     uart.print("{} == {}\n", .{ x, i });
     68                 } else {
     69                     uart.print("{} != {}\n", .{ x, i });
     70                 }
     71             } else {
     72                 uart.print("timed out\n", .{});
     73             }
     74         }
     75     }
     76 
     77     uart.print("done!\n", .{});
     78 }