Add doc comments to api package

This commit is contained in:
Elara 2021-10-22 21:01:18 -07:00
parent a235903583
commit 68bac8859f
4 changed files with 37 additions and 0 deletions

View File

@ -11,8 +11,10 @@ import (
"go.arsenm.dev/itd/internal/types"
)
// Default socket address
const DefaultAddr = "/tmp/itd/socket"
// Client is the socket API client
type Client struct {
conn net.Conn
respCh chan types.Response
@ -23,6 +25,7 @@ type Client struct {
dfuProgressCh chan DFUProgress
}
// New creates a new client and sets it up
func New(addr string) (*Client, error) {
conn, err := net.Dial("unix", addr)
if err != nil {
@ -48,6 +51,16 @@ func New(addr string) (*Client, error) {
return out, err
}
func (c *Client) Close() error {
err := c.conn.Close()
if err != nil {
return err
}
close(c.respCh)
return nil
}
// request sends a request to itd and waits for and returns the response
func (c *Client) request(req types.Request) (types.Response, error) {
// Encode request into connection
err := json.NewEncoder(c.conn).Encode(req)
@ -64,6 +77,7 @@ func (c *Client) request(req types.Request) (types.Response, error) {
return res, nil
}
// requestNoRes sends a request to itd and does not wait for the response
func (c *Client) requestNoRes(req types.Request) error {
// Encode request into connection
err := json.NewEncoder(c.conn).Encode(req)
@ -73,6 +87,7 @@ func (c *Client) requestNoRes(req types.Request) error {
return nil
}
// handleResp handles the received response as needed
func (c *Client) handleResp(res types.Response) error {
switch res.Type {
case types.ResTypeWatchHeartRate:

View File

@ -6,6 +6,7 @@ import (
"go.arsenm.dev/itd/internal/types"
)
// Address gets the bluetooth address of the connected device
func (c *Client) Address() (string, error) {
res, err := c.request(types.Request{
Type: types.ReqTypeBtAddress,
@ -17,6 +18,7 @@ func (c *Client) Address() (string, error) {
return res.Value.(string), nil
}
// Version gets the firmware version of the connected device
func (c *Client) Version() (string, error) {
res, err := c.request(types.Request{
Type: types.ReqTypeFwVersion,
@ -28,6 +30,7 @@ func (c *Client) Version() (string, error) {
return res.Value.(string), nil
}
// BatteryLevel gets the battery level of the connected device
func (c *Client) BatteryLevel() (uint8, error) {
res, err := c.request(types.Request{
Type: types.ReqTypeBattLevel,
@ -39,6 +42,8 @@ func (c *Client) BatteryLevel() (uint8, error) {
return uint8(res.Value.(float64)), nil
}
// WatchBatteryLevel returns a channel which will contain
// new battery level values as they update
func (c *Client) WatchBatteryLevel() (<-chan uint8, error) {
c.battLevelCh = make(chan uint8, 2)
err := c.requestNoRes(types.Request{
@ -50,6 +55,7 @@ func (c *Client) WatchBatteryLevel() (<-chan uint8, error) {
return c.battLevelCh, nil
}
// HeartRate gets the heart rate from the connected device
func (c *Client) HeartRate() (uint8, error) {
res, err := c.request(types.Request{
Type: types.ReqTypeHeartRate,
@ -61,6 +67,8 @@ func (c *Client) HeartRate() (uint8, error) {
return uint8(res.Value.(float64)), nil
}
// WatchHeartRate returns a channel which will contain
// new heart rate values as they update
func (c *Client) WatchHeartRate() (<-chan uint8, error) {
c.heartRateCh = make(chan uint8, 2)
err := c.requestNoRes(types.Request{
@ -72,6 +80,7 @@ func (c *Client) WatchHeartRate() (<-chan uint8, error) {
return c.heartRateCh, nil
}
// StepCount gets the step count from the connected device
func (c *Client) StepCount() (uint32, error) {
res, err := c.request(types.Request{
Type: types.ReqTypeStepCount,
@ -83,6 +92,8 @@ func (c *Client) StepCount() (uint32, error) {
return uint32(res.Value.(float64)), nil
}
// WatchStepCount returns a channel which will contain
// new step count values as they update
func (c *Client) WatchStepCount() (<-chan uint32, error) {
c.stepCountCh = make(chan uint32, 2)
err := c.requestNoRes(types.Request{
@ -94,6 +105,7 @@ func (c *Client) WatchStepCount() (<-chan uint32, error) {
return c.stepCountCh, nil
}
// Motion gets the motion values from the connected device
func (c *Client) Motion() (infinitime.MotionValues, error) {
out := infinitime.MotionValues{}
res, err := c.request(types.Request{
@ -109,6 +121,8 @@ func (c *Client) Motion() (infinitime.MotionValues, error) {
return out, nil
}
// WatchMotion returns a channel which will contain
// new motion values as they update
func (c *Client) WatchMotion() (<-chan infinitime.MotionValues, error) {
c.motionCh = make(chan infinitime.MotionValues, 2)
err := c.requestNoRes(types.Request{

View File

@ -6,6 +6,7 @@ import (
"go.arsenm.dev/itd/internal/types"
)
// SetTime sets the given time on the connected device
func (c *Client) SetTime(t time.Time) error {
_, err := c.request(types.Request{
Type: types.ReqTypeSetTime,
@ -17,6 +18,9 @@ func (c *Client) SetTime(t time.Time) error {
return nil
}
// SetTimeNow sets the time on the connected device to
// the current time. This is more accurate than
// SetTime(time.Now()) due to RFC3339 formatting
func (c *Client) SetTimeNow() error {
_, err := c.request(types.Request{
Type: types.ReqTypeSetTime,

View File

@ -6,15 +6,19 @@ import (
"go.arsenm.dev/itd/internal/types"
)
// DFUProgress stores the progress of a DFU upfate
type DFUProgress types.DFUProgress
// UpgradeType indicates the type of upgrade to be performed
type UpgradeType uint8
// Type of DFU upgrade
const (
UpgradeTypeArchive UpgradeType = iota
UpgradeTypeFiles
)
// FirmwareUpgrade initiates a DFU update and returns the progress channel
func (c *Client) FirmwareUpgrade(upgType UpgradeType, files ...string) (<-chan DFUProgress, error) {
err := json.NewEncoder(c.conn).Encode(types.Request{
Type: types.ReqTypeFwUpgrade,