{"id":15893705,"url":"https://github.com/pguyot/tagtagtag-ears","last_synced_at":"2025-08-02T00:35:13.991Z","repository":{"id":42029742,"uuid":"224523669","full_name":"pguyot/tagtagtag-ears","owner":"pguyot","description":"Linux driver for tagtagtag ears","archived":false,"fork":false,"pushed_at":"2024-05-26T20:25:55.000Z","size":39,"stargazers_count":9,"open_issues_count":2,"forks_count":9,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-14T20:08:42.047Z","etag":null,"topics":["gpio","iot","linux-driver","nabaztag","raspbian"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pguyot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-27T21:58:21.000Z","updated_at":"2025-05-11T06:11:21.000Z","dependencies_parsed_at":"2024-10-28T03:24:36.185Z","dependency_job_id":"b4dc0eef-8492-409f-a398-e15f5da0a48d","html_url":"https://github.com/pguyot/tagtagtag-ears","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/pguyot/tagtagtag-ears","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pguyot%2Ftagtagtag-ears","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pguyot%2Ftagtagtag-ears/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pguyot%2Ftagtagtag-ears/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pguyot%2Ftagtagtag-ears/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pguyot","download_url":"https://codeload.github.com/pguyot/tagtagtag-ears/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pguyot%2Ftagtagtag-ears/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268318395,"owners_count":24231574,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-01T02:00:08.611Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gpio","iot","linux-driver","nabaztag","raspbian"],"created_at":"2024-10-06T08:12:50.782Z","updated_at":"2025-08-02T00:35:13.934Z","avatar_url":"https://github.com/pguyot.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tagtagtag-ears\nLinux driver for tagtagtag ears\n\nCreates `/dev/ear0` (left) and `/dev/ear1` (right) to drive tagtagtag ears.\n\n## Installation\n\n    make\n    sudo make install\n\nThis adds:\n\n    dtoverlay=tagtagtag-ears\n\nto /boot/config.txt\n\n    reboot\n\n## Usage\n\nA single process can open `/dev/ear0` (resp. `/dev/ear1`). Any further access will fail with `EBUSY`.\n\nThe following commands are accepted:\n\n- `'.'`             NOP\n- `'+' \u003ccount\u003e`     Move ear \u003ccount\u003e steps forwards (count from 0 to 255)\n\nExample:\n\n    echo -n -e '+\\x03' \u003e /dev/ear0\n\nwill move the ear 3 steps forward\n\n- `'-' \u003ccount\u003e`     Move ear \u003ccount\u003e steps backwards (count from 0 to 255)\n\nExample:\n\n    echo -n -e '-\\x03' \u003e /dev/ear0\n\nwill move the ear 3 steps backward\n\n- `'\u003e' \u003cposition\u003e`  Move ear forward until \u003cposition\u003e % 17 is reached. If position \u003e 17, perform additional turns.\nIf position is unknown, perform a detection running forward.\n\nExample:\n\n    echo -n -e '\u003e\\x03' \u003e /dev/ear0\n\nwill move the ear forward to position \"3\" (3 steps after missing hole).\n\n- `'\u003c' \u003cposition\u003e`  Move ear backward until \u003cposition\u003e % 17 is reached. If position \u003e 17, perform additional turns.\nIf position is unknown, perform a detection running backward.\n\nExample:\n\n    echo -n -e '\u003c\\x03' \u003e /dev/ear0\n\nwill move the ear forward to position \"3\" (3 steps after missing hole).\n\n- `'?'`             Get position or -1 if unknown (to be read from device)\n\nExample:\n\n    echo -n -e '\u003e\\x03?' \u003e /dev/ear0 \u0026\u0026 dd if=/dev/ear0 of=/dev/stdout count=1 bs=1\n\nwill output '\\x03' after ear has been moved to position 3.\n\n- `'!'`             Get position, running a position detection if required.\n\n## Detecting user moves and blocking I/O\n\nDetecting user moves is achieved by reading `/dev/ear*`. Read blocks until ear is moved (it will then return 'm') or a get position command is invoked.\nOnce a 'm' is read, it will block until an additional movement occurs. Any command clears the buffer.\n\nWriting will block if the ear is not idle. Most command will set the ear in a non-idle state, thus '.' can be used to block until the command ends.\nCompare:\n\n     echo -n -e '+\\x0A' \u003e /dev/ear0\n\nwith:\n\n     echo -n -e '+\\x0A.' \u003e /dev/ear0\n\nThe first line returns immediatly. The second line blocks until the ear moved the requested steps.\n\n## Broken ears\n\nEars are tested on start-up (ears perform a full turn which is also used to determine ear position).\nIf, at any time, no rising GPIO interrupt is received within 3 seconds, the ear is considered broken.\nAny further write will fail.\nReading will return EOF.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpguyot%2Ftagtagtag-ears","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpguyot%2Ftagtagtag-ears","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpguyot%2Ftagtagtag-ears/lists"}