diff --git a/src/computer.c b/src/computer.c index c7c8b94..7d84499 100644 --- a/src/computer.c +++ b/src/computer.c @@ -66,6 +66,8 @@ nn_computer *nn_newComputer(nn_universe *universe, nn_address address, nn_archit c->resources[i].id = NN_NULL_RESOURCE; } + c->hasBeep = false; + return c; } @@ -652,3 +654,21 @@ const char *nn_resource_nextMethodInfo(nn_computer *computer, nn_size_t id, cons nn_deviceInfoList_t *nn_getComputerDeviceInfoList(nn_computer *computer) { return computer->deviceInfo; } + +void nn_computer_clearBeep(nn_computer *computer) { + computer->hasBeep = false; +} + +void nn_computer_setBeep(nn_computer *computer, double frequency, double duration, double volume) { + computer->hasBeep = true; + computer->beepFrequency = frequency; + computer->beepDuration = duration; + computer->beepVolume = volume; +} + +nn_bool_t nn_computer_getBeep(nn_computer *computer, double *frequency, double *duration, double *volume) { + if(frequency != NULL) *frequency = computer->beepFrequency; + if(duration != NULL) *duration = computer->beepDuration; + if(volume != NULL) *volume = computer->beepVolume; + return computer->hasBeep; +} diff --git a/src/testLuaArch.c b/src/testLuaArch.c index 521781e..4c2618a 100644 --- a/src/testLuaArch.c +++ b/src/testLuaArch.c @@ -207,6 +207,23 @@ static int testLuaArch_computer_uptime(lua_State *L) { // TODO: beep static int testLuaArch_computer_beep(lua_State *L) { + nn_computer *c = testLuaArch_getComputer(L); + // defaults + double frequency = 200; + double duration = 0.25; + double volume = 1; + + if(lua_type(L, 1) == LUA_TNUMBER) { + frequency = lua_tonumber(L, 1); + } + if(lua_type(L, 2) == LUA_TNUMBER) { + duration = lua_tonumber(L, 2); + } + if(lua_type(L, 3) == LUA_TNUMBER) { + volume = lua_tonumber(L, 3); + } + + nn_computer_setBeep(c, frequency, duration, volume); return 0; }