diff --git a/test/musicPackage_test.py b/test/musicPackage_test.py
new file mode 100644
index 00000000..65f4823f
--- /dev/null
+++ b/test/musicPackage_test.py
@@ -0,0 +1,41 @@
+#__import__("../musicPackages")
+import json
+import sys
+sys.path.insert(0, './')
+import musicPackages
+class MusicPackage_test:
+
+ def test_musicPackage(self):
+ print("sample Music Package: ")
+ print(" name_IT = name_it, name_EN = name_en , category = sample_category, version = sample_version, date = sample_date, interfaces = sample_interfaces, nameID = sample_id")
+
+ mpkg = musicPackages.MusicPackage(name_IT = "name_it", name_EN = "name_en", category= "sample_category", version= "sample_version", date="sample_date", nameID="sample_id")
+ print("name_IT : ", mpkg.getNameIT())
+ print("name_EN : ", mpkg.getNameEN())
+ print("nameID : ", mpkg.getNameID())
+ print("version : ", mpkg.getVersion())
+ print("date : ", mpkg.getDate())
+ print("category : ", mpkg.getCategory())
+ print("interfaces : ", mpkg.getInterfaces())
+
+ def test_isPackageAvaible(self):
+ pkg_manager = musicPackages.MusicPackageManager()
+ for package_name in pkg_manager.packages:
+ print("Test if " + package_name + " package is available")
+ result = pkg_manager.isPackageAvailable(package_name)
+ if(result):
+ print(package_name + " package is available")
+ else:
+ print(package_name + " package is not available")
+
+ print("Test if NONE package is available" )
+ result = pkg_manager.isPackageAvailable("NONE")
+ if(result):
+ print("NONE package is available")
+ else:
+ print("NONE package is not available")
+
+test = MusicPackage_test()
+test.test_musicPackage()
+test.test_isPackageAvaible()
+
diff --git a/test/music_test.py b/test/music_test.py
new file mode 100644
index 00000000..b73a6b1b
--- /dev/null
+++ b/test/music_test.py
@@ -0,0 +1,116 @@
+import sys
+import sox
+import time
+import os
+sys.path.insert(0, './')
+from musicPackages import MusicPackageManager
+from music import Music
+
+class Music_test:
+
+ def test_library(self):
+ print("testing sound playback:...")
+ tfm = sox.Transformer()
+ tfm.preview('cat.wav')
+ tfm.build('cat.wav', 'outMusicDemo.wav')
+
+# test each parametr of the function play_note
+ def test_play_note(self):
+ musicPkg = MusicPackageManager()
+ m = Music(musicPkg)
+ print('test Music.play_note')
+ print("m.play_note(note='C2')")
+ m.play_note(note='C2')
+ print("m.play_note(note='C2',duration=2.0)")
+ m.play_note(note='C2',duration=2.0)
+ print("m.play_note(note='C2',instrument='guitar')")
+ m.play_note(note='C2',instrument='guitar')
+ print("m.play_note(note='C2',alteration='bmolle')")
+ m.play_note(note='C2',alteration='bmolle')
+ print("m.play_note(note='C2',alteration='diesis')")
+ m.play_note(note='C2',alteration='diesis')
+ print("m.play_note(note='C2',instrument='guitar')")
+ m.play_note(note='C2',instrument='guitar')
+ print("m.play_note(note='C2',alteration='bmolle')")
+ m.play_note(note='C2',alteration='bmolle')
+ print("m.play_note(note='C2',instrument='guitar',alteration='diesis')")
+ m.play_note(note='C2',instrument='guitar',alteration='diesis')
+ print("m.play_note(note='C2',instrument='guitar',alteration='diesis',duration=2.0)")
+ m.play_note(note='C2',instrument='guitar',alteration='diesis',duration=2.0)
+ print("m.play_note(note='G3',duration=2.0)")
+ m.play_note(note='G3',duration=2.0)
+ print("m.play_note(note='G3',instrument='guitar')")
+ m.play_note(note='G3',instrument='guitar')
+ print("m.play_note(note='G3',alteration='bmolle')")
+ m.play_note(note='G3',alteration='bmolle')
+ print("m.play_note(note='G3',alteration='diesis')")
+ m.play_note(note='G3',alteration='diesis')
+ print("m.play_note(note='G3',instrument='guitar')")
+ m.play_note(note='G3',instrument='guitar')
+ print("m.play_note(note='G3',alteration='bmolle')")
+ m.play_note(note='G3',alteration='bmolle')
+ print("m.play_note(note='G3',instrument='guitar',alteration='diesis')")
+ m.play_note(note='G3',instrument='guitar',alteration='diesis')
+ print("m.play_note(note='G3',instrument='guitar',alteration='diesis',duration=2.0)")
+ m.play_note(note='G3',instrument='guitar',alteration='diesis',duration=2.0)
+ print("it's ok if print: no instrument: coderInstrument present in this coderbot!")
+ m.play_note(note='C2',instrument='coderInstrument',alteration='diesis',duration=2.0)
+ print("it's ok if print: note: coderNote not exist")
+ m.play_note(note='coderNote',instrument='piano',alteration='diesis',duration=2.0)
+
+
+# test each parametr of the function play_note
+ def test_play_animal(self):
+ print('test Music.play_animal')
+ musicPkg = MusicPackageManager()
+ m = Music(musicPkg)
+ print("(note='C2',instrument='cat', duration=2.0)")
+ m.play_animal(note='C2',instrument='cat', duration=2.0)
+ print("m.play_animal(note='C2',instrument='dog')")
+ m.play_animal(note='C2',instrument='dog')
+ print("m.play_animal(note='C2',instrument='dog', alteration='bmolle')")
+ m.play_animal(note='C2',instrument='dog', alteration='bmolle')
+ print("m.play_animal(note='C2',instrument='cat', alteration='diesis')")
+ m.play_animal(note='C2',instrument='cat', alteration='diesis')
+ print("m.play_animal(note='C2',instrument='dinosaur')")
+ m.play_animal(note='C2',instrument='dinosaur')
+ print("m.play_animal(note='C2',alteration='bmolle')")
+ m.play_animal(note='C2',instrument="dinosaur", alteration='bmolle')
+ print("m.play_animal(note='C2',instrument='cat',alteration='diesis')")
+ m.play_animal(note='C2',instrument='cat',alteration='diesis')
+ print("m.play_animal(note='C2',instrument='cat',alteration='diesis',duration=2.0)")
+ m.play_animal(note='C2',instrument='cat',alteration='diesis',duration=2.0)
+ print("m.play_note(note='G3',duration=2.0)")
+ m.play_note(note='G3',duration=2.0)
+ print("m.play_note(note='G3',instrument='dinosaur',alteration='bmolle')")
+ m.play_note(note='G3',instrument='dinosaur',alteration='bmolle')
+ print("m.play_note(note='G3',instrument='dinosaur',alteration='diesis')")
+ m.play_note(note='G3',instrument='dinosaur',alteration='diesis')
+ print("m.play_note(note='G3',alteration='bmolle', instrument= 'cat')")
+ m.play_note(note='G3',alteration='bmolle', instrument= 'cat')
+ print("m.play_note(note='G3',instrument='cat',alteration='diesis')")
+ m.play_note(note='G3',instrument='cat',alteration='diesis')
+ print("m.play_note(note='G3',instrument='cat',alteration='diesis',duration=2.0)")
+ m.play_note(note='G3',instrument='cat',alteration='diesis',duration=2.0)
+ print("it's ok if print: no instrument: coderInstrument present in this coderbot!")
+ m.play_animal(note='C2',instrument='coderInstrument',alteration='diesis',duration=2.0)
+ print("it's ok if print: note: coderNote not exist")
+ m.play_animal(note='coderNote',instrument='cat',alteration='diesis',duration=2.0)
+ print('test Music.play_note: ENDED')
+
+
+ def test_play_pause(self):
+ print('test Music.play_pause')
+ musicPkg = MusicPackageManager()
+ m = Music()
+ prrint("play pause")
+ m.play_pause(1.0)
+ prrint("play pause and note")
+ m.play_note(note='C2',instrument='guitar')
+ m.play_pause(2.0)
+ m.play_note(note='C2',instrument='guitar')
+
+test = Music_test()
+test.test_play_note()
+test.test_play_animal()
+
diff --git a/v2.yml b/v2.yml
index 803cac67..b09d8871 100644
--- a/v2.yml
+++ b/v2.yml
@@ -1,6 +1,6 @@
swagger: "2.0"
info:
- version: "0.2"
+ version: "0.3"
title: OpenAPI 2.0 definition of Coderbot API v2
consumes:
@@ -74,9 +74,35 @@ paths:
description: "ok"
400:
description: "Failed to save the activity"
+ /listMusicPackages:
+ get:
+ operationId: "api.listMusicPackages"
+ summary: "List Music Packages"
+ responses:
+ 200:
+ description: "ok"
+ /deleteMusicPackage:
+ post:
+ operationId: "api.deleteMusicPackage"
+ summary: "Delete Music Package"
+ parameters:
+ - name: package_data
+ in: body
+ schema:
+ type: object
+ properties:
+ package_name:
+ type: string
+ responses:
+ 200:
+ description: "ok"
+ 400:
+ description: "not found"
+
/updateFromPackage:
post:
operationId: "api.updateFromPackage"
+ summary: "Update CoderBot from package"
consumes:
- multipart/form-data
parameters:
@@ -120,7 +146,11 @@ paths:
- name: name
in: query
type: string
- required: true
+ required: false
+ - name: default
+ in: query
+ type: string
+ required: false
tags:
- Activity management
responses:
@@ -133,10 +163,6 @@ paths:
tags:
- Program management
parameters:
- - name: overwrite
- in: query
- required: false
- type: string
- in: body
name: data
schema:
@@ -191,7 +217,7 @@ paths:
description: Components names to be tested
schema:
type: object
- default: {'varargin': ['motors', 'sonar', 'speaker', 'ocr']}
+ # default: {'varargin': ['motors', 'sonar', 'speaker', 'ocr']}
required:
- varargin
properties:
@@ -232,7 +258,7 @@ paths:
description: Movement speed and duration
schema:
type: object
- default: {'speed': 100, 'elapse':0, 'distance':0}
+ # default: {'speed': 100, 'elapse':0, 'distance':0}
required:
- speed
- elapse
@@ -276,3 +302,13 @@ paths:
responses:
200:
description: Sent command to the bot GPIO.
+ /listCNNModels:
+ get:
+ operationId: "api.list_cnn_models"
+ summary: "list of CNN Models"
+ tags:
+ - CNN Models
+ responses:
+ 200:
+ description: "CNN Models as JSON Object"
+
diff --git a/wifi.py b/wifi.py
index 735db240..4fa447e4 100755
--- a/wifi.py
+++ b/wifi.py
@@ -91,7 +91,7 @@ def get_ipaddr(cls, ifname):
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
- struct.pack('256s', ifname[:15])
+ struct.pack('256s', ifname.encode('utf-8')[:15])
)[20:24])
@classmethod
@@ -135,9 +135,22 @@ def set_ap_params(cls, wssid=None, wpsk=None):
if wpsk:
os.system("sudo sed -i s/wpa_passphrase=.*$/wpa_passphrase=" + wpsk + "/ /etc/hostapd/" + cls.hostapds.get(adapter) + ".conf")
+ @classmethod
+ def get_ap_params(cls):
+ adapter = cls.get_adapter_type()
+ ap_conf = {}
+ with open("/etc/hostapd/" + cls.hostapds.get(adapter) + ".conf", "r") as hostapd_conf:
+ for l in hostapd_conf.readlines():
+ ls = l.split("=")
+ ap_conf[ls[0]] = ls[1]
+ return ap_conf
+
@classmethod
def set_start_as_client(cls):
cls._config["wifi_mode"] = "client"
+ os.system("sudo systemctl disable hostapd")
+ os.system("sudo systemctl disable dnsmasq")
+ os.system("sudo cp /etc/dhcpcd.conf.client /etc/dhcpcd.conf")
cls.save_config()
@classmethod
@@ -147,18 +160,11 @@ def set_bot_name(cls, name):
@classmethod
def start_as_client(cls):
- cls.stop_dnsmasq()
- cls.stop_hostapd()
try:
- time.sleep(1.0)
- out = os.system("wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf > /dev/null 2>&1")
- out += os.system("dhclient -1 wlan0")
- print(out)
- try:
- cls.register_ipaddr(cls.get_macaddr("wlan0"), cls.get_config().get('bot_name', 'CoderBot'), cls.get_ipaddr("wlan0"), "roberto.previtera@gmail.com")
- print("registered bot, ip: " + str(cls.get_ipaddr("wlan0") + " name: " + cls.get_config().get('bot_name', 'CoderBot')))
- except:
- pass
+ time.sleep(30.0)
+ ipaddr = cls.get_ipaddr("wlan0")
+ if ipaddr is None or "169.254" in ipaddr:
+ raise Exception()
except subprocess.CalledProcessError as e:
print(e.output)
raise
@@ -166,19 +172,11 @@ def start_as_client(cls):
@classmethod
def set_start_as_ap(cls):
cls._config["wifi_mode"] = "ap"
+ os.system("sudo systemctl enable hostapd")
+ os.system("sudo systemctl enable dnsmasq")
+ os.system("sudo cp /etc/dhcpcd.conf.ap /etc/dhcpcd.conf")
cls.save_config()
- @classmethod
- def start_as_ap(cls):
- time.sleep(1.0)
- out = str(subprocess.check_output(["ip", "link", "set", "dev", "wlan0", "down"]))
- out += str(subprocess.check_output(["ip", "a", "add", "10.0.0.1/24", "dev", "wlan0"]))
- out += str(subprocess.check_output(["ip", "link", "set", "dev", "wlan0", "up"]))
- out += str(subprocess.check_output(["ifconfig"]))
- print(out)
- cls.start_hostapd()
- cls.start_dnsmasq()
-
@classmethod
def start_service(cls):
config = cls.load_config()
@@ -191,7 +189,8 @@ def start_service(cls):
cls.start_as_client()
except:
print("Unable to register ip, revert to ap mode")
- cls.start_as_ap()
+ cls.set_start_as_ap()
+ os.system("sudo reboot")
@classmethod
def get_hostapd_config_file(cls):
@@ -234,27 +233,34 @@ def get_serial(cls):
def main():
parser = argparse.ArgumentParser(description="CoderBot wifi config manager and daemon initializer", prog="wifi.py")
- subparsers = parser.add_subparsers()
+ subparsers = parser.add_subparsers(dest='subparser_name')
up = subparsers.add_parser('updatecfg', help="update configuration")
up.add_argument('-m', '--mode', choices=['ap', 'client'], help='wifi mode')
up.add_argument('-s', '--ssid', help='wifi ssid')
up.add_argument('-p', '--pwd', help='wifi password')
up.add_argument('-n', '--name', help='coderbot unique id')
+ get = subparsers.add_parser('getcfg', help="get configuration")
+ get.add_argument('-s', '--ssid', nargs="*", help='wifi mode')
+ get = subparsers.add_parser('setuniquessid', help="set unique ssid")
args = vars(parser.parse_args())
- print(args)
w = WiFi()
if args:
- if args['mode'] == 'ap':
- w.set_start_as_ap()
- w.set_ap_params(args['ssid'], args['pwd'])
- elif args['mode'] == 'client':
- w.set_start_as_client()
- w.set_client_params(args['ssid'], args['pwd'])
- if args['name']:
- w.set_bot_name(args['name'])
- else:
- w.set_unique_ssid()
- w.start_service()
+ if args["subparser_name"] == "updatecfg":
+ if args['mode'] == 'ap':
+ w.set_start_as_ap()
+ w.set_ap_params(args['ssid'], args['pwd'])
+ elif args['mode'] == 'client':
+ w.set_start_as_client()
+ w.set_client_params(args['ssid'], args['pwd'])
+ if 'name' in args:
+ w.set_bot_name(args['name'])
+ elif args["subparser_name"] == "getcfg":
+ if "ssid" in args:
+ print(w.get_ap_params()["ssid"])
+ elif args["subparser_name"] == "setuniquessid":
+ w.set_unique_ssid()
+ else:
+ w.start_service()
if __name__ == "__main__":
main()
pFad - Phonifier reborn
Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy