Packages

A Gleam client library for controlling intimate hardware

Current section

Files

Jump to
bummer src bummer.erl
Raw

src/bummer.erl

-module(bummer).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([set_log_level/1, connect/1, scan/2, vibrate/2, rotate/2, main/0]).
-export_type([message/0]).
-type message() :: {request_server_info, integer(), binary()} |
{request_device_list, integer()} |
{start_scanning, integer()} |
{stop_scanning, integer()} |
{vibrate, integer(), integer(), float()} |
{rotate, integer(), integer(), float()} |
{stop, integer()}.
-file("/home/jkadlcik/git/bummer/src/bummer.gleam", 25).
-spec set_log_level(gleam@erlang@atom:atom_()) -> nil.
set_log_level(Level) ->
'Elixir.Socket':set_log_level(Level).
-file("/home/jkadlcik/git/bummer/src/bummer.gleam", 29).
-spec serialize(message()) -> binary().
serialize(Message) ->
case Message of
{request_server_info, Id, Client_name} ->
<<<<<<<<"[{\"RequestServerInfo\": {\"ClientName\": \""/utf8,
Client_name/binary>>/binary,
"\", \"MessageVersion\": 1, \"Id\": "/utf8>>/binary,
(erlang:integer_to_binary(Id))/binary>>/binary,
"}}]"/utf8>>;
{request_device_list, Id@1} ->
<<<<"[{\"RequestDeviceList\": {\"Id\": "/utf8,
(erlang:integer_to_binary(Id@1))/binary>>/binary,
"}}]"/utf8>>;
{start_scanning, Id@2} ->
<<<<"[{\"StartScanning\": {\"Id\": "/utf8,
(erlang:integer_to_binary(Id@2))/binary>>/binary,
"}}]"/utf8>>;
{stop_scanning, Id@3} ->
<<<<"[{\"StopScanning\": {\"Id\": "/utf8,
(erlang:integer_to_binary(Id@3))/binary>>/binary,
"}}]"/utf8>>;
{vibrate, Id@4, Device, Speed} ->
<<<<<<<<<<<<"[{\"VibrateCmd\": {\"DeviceIndex\": "/utf8,
(erlang:integer_to_binary(Device))/binary>>/binary,
", \"Speeds\": [{\"Index\": 0, \"Speed\": "/utf8>>/binary,
(gleam_stdlib:float_to_string(Speed))/binary>>/binary,
"}], \"Id\": "/utf8>>/binary,
(erlang:integer_to_binary(Id@4))/binary>>/binary,
"}}]"/utf8>>;
{rotate, Id@5, Device@1, Speed@1} ->
<<<<<<<<<<<<<<"[{\"RotateCmd\": {\"DeviceIndex\": "/utf8,
(erlang:integer_to_binary(Device@1))/binary>>/binary,
", \"Rotations\": [{\"Index\": 0, \"Speed\": "/utf8>>/binary,
(gleam_stdlib:float_to_string(Speed@1))/binary>>/binary,
", \"Clockwise\": true"/utf8>>/binary,
"}], \"Id\": "/utf8>>/binary,
(erlang:integer_to_binary(Id@5))/binary>>/binary,
"}}]"/utf8>>;
{stop, Id@6} ->
<<<<"[{\"StopDeviceCmd\": {\"DeviceIndex\": 0, \"Id\": "/utf8,
(erlang:integer_to_binary(Id@6))/binary>>/binary,
"}}]"/utf8>>
end.
-file("/home/jkadlcik/git/bummer/src/bummer.gleam", 77).
-spec connect(binary()) -> {ok, gleam@erlang@process:pid_()} |
{error, gleam@dynamic:dynamic_()}.
connect(Url) ->
gleam@result:'try'(
'Elixir.Socket':start_link(Url),
fun(Socket) ->
_pipe = {request_server_info, 1, <<"Bummer"/utf8>>},
_pipe@1 = serialize(_pipe),
'Elixir.Socket':echo(Socket, _pipe@1),
{ok, Socket}
end
).
-file("/home/jkadlcik/git/bummer/src/bummer.gleam", 85).
-spec scan(gleam@erlang@process:pid_(), integer()) -> gleam@erlang@atom:atom_().
scan(Socket, Miliseconds) ->
Res = begin
_pipe = {start_scanning, 1},
_pipe@1 = serialize(_pipe),
'Elixir.Socket':echo(Socket, _pipe@1)
end,
gleam_erlang_ffi:sleep(Miliseconds),
Res.
-file("/home/jkadlcik/git/bummer/src/bummer.gleam", 95).
-spec do(gleam@erlang@process:pid_(), message(), integer()) -> nil.
do(Socket, Message, Miliseconds) ->
_pipe = Message,
_pipe@1 = serialize(_pipe),
'Elixir.Socket':echo(Socket, _pipe@1),
gleam_erlang_ffi:sleep(Miliseconds),
_pipe@2 = {stop, 1},
_pipe@3 = serialize(_pipe@2),
'Elixir.Socket':echo(Socket, _pipe@3),
nil.
-file("/home/jkadlcik/git/bummer/src/bummer.gleam", 109).
-spec vibrate(gleam@erlang@process:pid_(), integer()) -> nil.
vibrate(Socket, Miliseconds) ->
Device = 0,
Speed = 0.5,
_pipe = {vibrate, 1, Device, Speed},
do(Socket, _pipe, Miliseconds).
-file("/home/jkadlcik/git/bummer/src/bummer.gleam", 115).
-spec rotate(gleam@erlang@process:pid_(), integer()) -> nil.
rotate(Socket, Miliseconds) ->
Device = 0,
Speed = 0.5,
_pipe = {rotate, 1, Device, Speed},
do(Socket, _pipe, Miliseconds).
-file("/home/jkadlcik/git/bummer/src/bummer.gleam", 121).
-spec main() -> nil.
main() ->
'Elixir.Socket':set_log_level(erlang:binary_to_atom(<<"info"/utf8>>)),
case connect(<<"ws://127.0.0.1:12345/"/utf8>>) of
{ok, Socket} ->
gleam_stdlib:println(
<<"Connected to intiface-engine websocket"/utf8>>
),
gleam_stdlib:println(<<"Initiating a test sequence"/utf8>>),
scan(Socket, 5000),
vibrate(Socket, 500),
gleam_erlang_ffi:sleep(500),
rotate(Socket, 500),
gleam_stdlib:println(<<"Test sequence finished"/utf8>>);
{error, _} ->
_pipe = <<"Cannot connect to intiface-engine websocket. Is it running?"/utf8>>,
gleam_stdlib:println_error(_pipe)
end.