Skip to content

svcd_ndispatch #32

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 25 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
05871e9
Initial tank server app
nikitakit Feb 5, 2015
e2f5a1d
basic lab 3 test broadcast
jenniferdai Feb 16, 2015
9143ea1
temp sensor testing
jenniferdai Feb 22, 2015
2f2658e
Basic service code
nikitakit Feb 22, 2015
be6b222
Merge remote-tracking branch 'nikita/master'
Feb 22, 2015
7d9dea5
relay lib
jenniferdai Feb 22, 2015
417b93e
Merge remote-tracking branch 'jennifer/master'
Feb 22, 2015
9e861a0
changing testing broad
Feb 22, 2015
043030c
testing_broadcast update
jenniferdai Feb 22, 2015
f7e7f23
added toggling temp
jenniferdai Feb 22, 2015
475d3d7
our temp.lua file
jenniferdai Feb 22, 2015
c02241b
Merge branch 'master' of https://github.com/UCB-IoET/ioet_contrib
Feb 22, 2015
a8ac87a
services
Feb 22, 2015
0696cc7
TOASTEEERRRRRR
Feb 22, 2015
ad2d07b
Merge branch 'master' of https://github.com/UCB-IoET/ioet_contrib
Feb 22, 2015
ba49481
Merge branch 'master' of https://github.com/UCB-IoET/personal-jennife…
Feb 22, 2015
e34c21d
Initial ADC library and sample app
nikitakit Feb 22, 2015
b87ddeb
pull ad2 code
jenniferdai Feb 22, 2015
b29f11e
Merge branch 'master' of https://github.com/UCB-IoET/ioet_contrib
jenniferdai Feb 24, 2015
94455c6
Merge branch 'feature-svcd-init' of https://github.com/UCB-IoET/ioet_…
jenniferdai Feb 24, 2015
28bc8d5
Merge branch 'master' of https://github.com/UCB-IoET/ioet_contrib
jenniferdai Feb 26, 2015
687e2f5
wait what happened to my old one
jenniferdai Feb 27, 2015
4a79d9a
get rid of comments
jenniferdai Feb 27, 2015
d3da97f
now it actually works
jenniferdai Feb 27, 2015
3923b04
Update svcd.c
jenniferdai Mar 1, 2015
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions app/service.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
require "cord" -- scheduler / fiber library
Toaster = require "toaster"

toaster = Toaster:new("D6")
toaster:init()
ipaddr = storm.os.getipaddr()
ipaddrs = string.format("%02x%02x:%02x%02x:%02x%02x:%02x%02x::%02x%02x:%02x%02x:%02x%02x:%02x%02x",
ipaddr[0],
ipaddr[1],ipaddr[2],ipaddr[3],ipaddr[4],
ipaddr[5],ipaddr[6],ipaddr[7],ipaddr[8],
ipaddr[9],ipaddr[10],ipaddr[11],ipaddr[12],
ipaddr[13],ipaddr[14],ipaddr[15])

print("ip addr", ipaddrs)
print("node id", storm.os.nodeid())

service_announce = 1525
service_invoke = 1526

function pt(x) for k,v in pairs(x) do print("", "", k,v) end end

function print_msg(msg)
if (type(msg) ~= "table") then
print("Malformed service [type=%s]", type(msg))
return {}
end

for k,v in pairs(msg) do
if (k ~= "id") then
if type(v) ~= "table" then
print("", k, v)
else
print("", k)
pt(v)
end
else
print("", k, v)
end
end

return msg
end

a_socket = storm.net.udpsocket(service_announce,
function(payload, from, port)
print (string.format("from %s port %d",from,port))
local msg = storm.mp.unpack(payload)
msg = print_msg(msg)
end)

local svc_manifest = {
id="FirestormTroopers",
turnOn={},
turnOff={},
setTemperature={t="degrees in celcius"},
getTemperature={},
}

local svc_msg = storm.mp.pack(svc_manifest)
storm.os.invokePeriodically(2*storm.os.SECOND,
function()
print ("SENDING ANNOUNCEMENT")
storm.net.sendto(
a_socket,
svc_msg,
"ff02::1",
service_announce)
end)

storm.io.set_mode(storm.io.OUTPUT, storm.io.GP0)


b_socket = storm.net.udpsocket(service_invoke,
function(payload, from, port)
print (string.format("invoke from %s port %d",from,port))
local msg = storm.mp.unpack(payload)
if (type(msg) ~= "table") then
print ("Invalid format [type=%s]", type(msg))
return
end

cmd = msg[1]
args = msg[2]
print("cmd", cmd)
print("args", args)
if (cmd == nil) then
return
end

if (args == nil) then
args = {}
elseif (type(args) ~= "table") then
args = {args}
end

if (cmd == "turnOn") then
toaster:on()
elseif (cmd == "turnOff") then
toaster:off()
elseif (cmd == "setTemperature") then
toaster:setTemp(args)
elseif (cmd == "getTemperature") then
toaster:getTemp(args)
end
end)

-- enable a shell
sh = require "stormsh"
sh.start()
cord.enter_loop() -- start event/sleep loop
60 changes: 60 additions & 0 deletions app/testing_broadcast.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
require "cord"
-- sock = storm.net.udpsocket(1525, function(payload, from, port) end)
local svc_manifest = {id="what"}
function pt(x) for k,v in pairs(x) do print("", "", k,v) end end

function print_msg(msg)
if (type(msg) ~= "table") then
print("Malformed service [type=%s]", type(msg))
return {}
end

for k,v in pairs(msg) do
if (k ~= "id") then
if type(v) ~= "table" then
print("", k, v)
else
print("", k)
pt(v)
end
else
print("", k, v)
end
end

return msg
end

a_socket = storm.net.udpsocket(1525,
function(payload, from, port)
print (string.format("from %s port %d",from,port))
local msg = storm.mp.unpack(payload)
msg = print_msg(msg)
end)
local msg = storm.mp.pack(svc_manifest)
storm.os.invokePeriodically(5*storm.os.SECOND, function()
storm.net.sendto(a_socket, msg, "ff02::1", 1525)
end)

local svc_invoke_off = {
"setOvenState",
{false},
}
local svc_invoke_on = {
"setOvenState",
{true},
}
local onMsg = storm.mp.pack(svc_invoke_on)
local offMsg = storm.mp.pack(svc_invoke_off)
function toggleState(args)
print("i want to turn the oven on")
if args then
storm.net.sendto(a_socket, onMsg, "ff02::1", 1526)
else
storm.net.sendto(a_socket, offMsg, "ff02::1", 1526)
end
end
sh = require "stormsh"
sh.start()
cord.enter_loop()

29 changes: 29 additions & 0 deletions lib/ourtemp.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
require("storm") -- libraries for interfacing with the board and kernel
require("cord") -- scheduler / fiber library

----------------------------------------------
-- TEMP class
-- basic TEMP functions associated with a shield pin
-- assume cord.enter_loop() is active, as per stormsh
----------------------------------------------
local TEMP = {}

function TEMP:new(temppin)
assert(temppin and storm.io[temppin], "invalid pin spec")
obj = {pin = temppin} -- initialize the new object
setmetatable(obj, self) -- associate class methods
self.__index = self
storm.io.set_mode(storm.io.INPUT, storm.io[temppin])
return obj
end

function TEMP:pin()
return self.pin
end

function TEMP:readTemp()
temp_constant = 1 --XXX: Figure this out by testing...
return storm.io.get(storm.io[self.pin]) * temp_constant
end

return TEMP
33 changes: 33 additions & 0 deletions lib/relay.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
require("storm") -- libraries for interfacing with the board and kernel
require("cord") -- scheduler / fiber library

----------------------------------------------
-- RELAY class
-- basic RELAY functions associated with a shield pin
-- assume cord.enter_loop() is active, as per stormsh
----------------------------------------------
local RELAY = {}

function RELAY:new(relaypin)
assert(relaypin and storm.io[relaypin], "invalid pin spec")
obj = {pin = relaypin} -- initialize the new object
setmetatable(obj, self) -- associate class methods
self.__index = self
storm.io.set_mode(storm.io.OUTPUT, storm.io[relaypin])
return obj
end

function RELAY:pin()
return self.pin
end

function RELAY:on()
storm.io.set(1,storm.io[self.pin])
end

function RELAY:off()
storm.io.set(0,storm.io[self.pin])
end

return RELAY

27 changes: 27 additions & 0 deletions lib/temp.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
require("storm") -- libraries for interfacing with the board and kernel
require("cord") -- scheduler / fiber library
ADC = require ("adc") -- adc library

----------------------------------------------
-- TEMP class
-- basic TEMP functions associated with a shield pin
-- assume cord.enter_loop() is active, as per stormsh
----------------------------------------------
local TEMP = {}

function TEMP:new()
s = ADC:new()
s:init()
obj = {sensor = s} -- initialize the new object
setmetatable(obj, self) -- associate class methods
self.__index = self
return obj
end

function TEMP:readTemp()
return self.sensor:get()
-- temp_constant = 1 --XXX: Figure this out by testing...
-- return storm.io.get(storm.io[self.pin]) * temp_constant
end

return TEMP
58 changes: 58 additions & 0 deletions lib/toaster.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
require("storm") -- libraries for interfacing with the board and kernel
require("cord") -- scheduler / fiber library
Relay = require("relay")
--Temp = require("temp")
----------------------------------------------
-- Toaster class
-- basic TOASTER functions associated with a shield pin
-- assume cord.enter_loop() is active, as per stormsh
----------------------------------------------
local TOASTER = {}

function TOASTER:new(relaypin)
assert(relaypin and storm.io[relaypin], "invalid pin spec")
r = Relay:new(relaypin)
-- t = Temp:new()
obj = {relay = r, targetTemp = 0, state = false, tempSensor = t}
setmetatable(obj, self) -- associate class methods
self.__index = self
return obj
end
function TOASTER:init()
storm.os.invokePeriodically(5*storm.os.SECOND, function()
if self.state == true then
print("Toaster is on!")
if self:getTemp() > self.targetTemp then
self.relay:off()
print("BUT it's too HOT now")
else
self.relay:on()
print("BUT it's too COLD now")
end
else
self.relay:off()
print("Toaster is off!")
end
end)
end
function TOASTER:on()
self.state = true
self.relay:on()
end

function TOASTER:off()
self.state = false
self.relay:off()
end

function TOASTER:getTemp()
return 10
--return self.tempSensor:getTemp()
end

function TOASTER:setTemp(target)
self.targetTemp = target
end

return TOASTER

Loading