gobot.io/x/gobot/v2@v2.1.0/platforms/dexter/gopigo3/driver_test.go (about) 1 package gopigo3 2 3 import ( 4 "encoding/hex" 5 "testing" 6 7 "gobot.io/x/gobot/v2" 8 "gobot.io/x/gobot/v2/drivers/spi" 9 "gobot.io/x/gobot/v2/gobottest" 10 ) 11 12 var _ gobot.Driver = (*Driver)(nil) 13 var negativeEncoder = false 14 15 func initTestDriver() *Driver { 16 d := NewDriver(&TestConnector{}) 17 d.Start() 18 return d 19 } 20 21 func TestDriverStart(t *testing.T) { 22 d := initTestDriver() 23 gobottest.Assert(t, d.Start(), nil) 24 } 25 26 func TestDriverHalt(t *testing.T) { 27 d := initTestDriver() 28 gobottest.Assert(t, d.Halt(), nil) 29 } 30 31 func TestDriverManufacturerName(t *testing.T) { 32 expectedName := "Dexter Industries" 33 d := initTestDriver() 34 name, err := d.GetManufacturerName() 35 if err != nil { 36 t.Error(err) 37 } 38 if name != expectedName { 39 t.Errorf("Expected name: %x, got: %x", expectedName, name) 40 } 41 } 42 43 func TestDriverBoardName(t *testing.T) { 44 expectedBoardName := "GoPiGo3" 45 d := initTestDriver() 46 name, err := d.GetBoardName() 47 if err != nil { 48 t.Error(err) 49 } 50 if name != expectedBoardName { 51 t.Errorf("Expected name: %s, got: %s", expectedBoardName, name) 52 } 53 } 54 55 func TestDriverHardwareVersion(t *testing.T) { 56 expectedHwVer := "3.1.3" 57 d := initTestDriver() 58 ver, err := d.GetHardwareVersion() 59 if err != nil { 60 t.Error(err) 61 } 62 if ver != expectedHwVer { 63 t.Errorf("Expected hw ver: %s, got: %s", expectedHwVer, ver) 64 } 65 } 66 67 func TestDriverFirmareVersion(t *testing.T) { 68 expectedFwVer := "0.3.4" 69 d := initTestDriver() 70 ver, err := d.GetFirmwareVersion() 71 if err != nil { 72 t.Error(err) 73 } 74 if ver != expectedFwVer { 75 t.Errorf("Expected fw ver: %s, got: %s", expectedFwVer, ver) 76 } 77 } 78 79 func TestGetSerialNumber(t *testing.T) { 80 expectedSerialNumber := "E0180A54514E343732202020FF112137" 81 d := initTestDriver() 82 serial, err := d.GetSerialNumber() 83 if err != nil { 84 t.Error(err) 85 } 86 if serial != expectedSerialNumber { 87 t.Errorf("Expected serial number: %s, got: %s", expectedSerialNumber, serial) 88 } 89 } 90 91 func TestGetFiveVolts(t *testing.T) { 92 expectedVoltage := float32(5.047000) 93 d := initTestDriver() 94 voltage, err := d.Get5vVoltage() 95 if err != nil { 96 t.Error(err) 97 } 98 if voltage != expectedVoltage { 99 t.Errorf("Expected 5v voltage: %f, got: %f", expectedVoltage, voltage) 100 } 101 } 102 103 func TestGetBatVolts(t *testing.T) { 104 expectedBatVoltage := float32(15.411000) 105 d := initTestDriver() 106 voltage, err := d.GetBatteryVoltage() 107 if err != nil { 108 t.Error(err) 109 } 110 if voltage != expectedBatVoltage { 111 t.Errorf("Expected battery voltage: %f, got: %f", expectedBatVoltage, voltage) 112 } 113 } 114 115 func TestGetMotorStatus(t *testing.T) { 116 expectedPower := uint16(65408) 117 d := initTestDriver() 118 _, power, _, _, err := d.GetMotorStatus(MOTOR_LEFT) 119 if err != nil { 120 t.Error(err) 121 } 122 if power != expectedPower { 123 t.Errorf("Expected power: %d, got: %d", expectedPower, power) 124 } 125 } 126 127 func TestGetEncoderStatusPos(t *testing.T) { 128 negativeEncoder = false 129 expectedEncoderValue := int64(127) 130 d := initTestDriver() 131 encoderValue, err := d.GetMotorEncoder(MOTOR_LEFT) 132 if err != nil { 133 t.Error(err) 134 } 135 if encoderValue != expectedEncoderValue { 136 t.Errorf("Expected encoder value: %d, got: %d", expectedEncoderValue, encoderValue) 137 } 138 } 139 140 func TestGetEncoderStatusNeg(t *testing.T) { 141 negativeEncoder = true 142 expectedEncoderValue := int64(-128) 143 d := initTestDriver() 144 encoderValue, err := d.GetMotorEncoder(MOTOR_LEFT) 145 if err != nil { 146 t.Error(err) 147 } 148 if encoderValue != expectedEncoderValue { 149 t.Errorf("Expected encoder value: %d, got: %d", expectedEncoderValue, encoderValue) 150 } 151 } 152 153 func TestAnalogRead(t *testing.T) { 154 expectedVal := 160 155 d := initTestDriver() 156 val, err := d.AnalogRead("AD_1_1") 157 if err != nil { 158 t.Error(err) 159 } 160 if val != expectedVal { 161 t.Errorf("Expected value: %d, got: %d", expectedVal, val) 162 } 163 } 164 165 func TestDigitalRead(t *testing.T) { 166 expectedVal := 1 167 d := initTestDriver() 168 val, err := d.DigitalRead("AD_1_2") 169 if err != nil { 170 t.Error(err) 171 } 172 if val != expectedVal { 173 t.Errorf("Expected value: %d, got: %d", expectedVal, val) 174 } 175 } 176 177 func TestServoWrite(t *testing.T) { 178 d := initTestDriver() 179 err := d.ServoWrite("SERVO_1", 0x7F) 180 if err != nil { 181 t.Error(err) 182 } 183 } 184 185 func TestSetMotorPosition(t *testing.T) { 186 d := initTestDriver() 187 err := d.SetMotorPosition(MOTOR_LEFT, 12.0) 188 if err != nil { 189 t.Error(err) 190 } 191 } 192 193 func TestSetMotorPower(t *testing.T) { 194 d := initTestDriver() 195 err := d.SetMotorPower(MOTOR_LEFT, 127) 196 if err != nil { 197 t.Error(err) 198 } 199 } 200 201 func TestSetMotorDps(t *testing.T) { 202 d := initTestDriver() 203 err := d.SetMotorDps(MOTOR_LEFT, 12.0) 204 if err != nil { 205 t.Error(err) 206 } 207 } 208 209 func TestOffsetMotorEncoder(t *testing.T) { 210 d := initTestDriver() 211 err := d.OffsetMotorEncoder(MOTOR_LEFT, 12.0) 212 if err != nil { 213 t.Error(err) 214 } 215 } 216 217 func TestSetPWMDuty(t *testing.T) { 218 d := initTestDriver() 219 err := d.SetPWMDuty(AD_1_1_G, 80) 220 if err != nil { 221 t.Error(err) 222 } 223 } 224 225 func TestSetPWMfreq(t *testing.T) { 226 d := initTestDriver() 227 err := d.SetPWMFreq(AD_1_2_G, 100) 228 if err != nil { 229 t.Error(err) 230 } 231 } 232 233 func TestPwmWrite(t *testing.T) { 234 d := initTestDriver() 235 err := d.PwmWrite("AD_2_2", 80) 236 if err != nil { 237 t.Error(err) 238 } 239 } 240 241 func TestDigitalWrite(t *testing.T) { 242 d := initTestDriver() 243 err := d.DigitalWrite("AD_2_1", 1) 244 if err != nil { 245 t.Error(err) 246 } 247 } 248 249 type TestConnector struct{} 250 251 func (ctr *TestConnector) GetSpiConnection(busNum, chipNum, mode, bits int, maxSpeed int64) (device spi.Connection, err error) { 252 return TestSpiDevice{}, nil 253 } 254 255 func (ctr *TestConnector) SpiDefaultBusNumber() int { 256 return 0 257 } 258 259 func (ctr *TestConnector) SpiDefaultChipNumber() int { 260 return 0 261 } 262 263 func (ctr *TestConnector) SpiDefaultMode() int { 264 return 0 265 } 266 267 func (ctr *TestConnector) SpiDefaultBitCount() int { 268 return 8 269 } 270 271 func (ctr *TestConnector) SpiDefaultMaxSpeed() int64 { 272 return 0 273 } 274 275 type TestSpiDevice struct { 276 bus spi.Connection 277 } 278 279 func (c TestSpiDevice) Close() error { 280 return nil 281 } 282 283 func (c TestSpiDevice) ReadByteData(byte) (byte, error) { return 0, nil } 284 func (c TestSpiDevice) ReadBlockData(byte, []byte) error { return nil } 285 func (c TestSpiDevice) WriteByte(byte) error { return nil } 286 func (c TestSpiDevice) WriteByteData(byte, byte) error { return nil } 287 func (c TestSpiDevice) WriteBlockData(byte, []byte) error { return nil } 288 func (c TestSpiDevice) WriteBytes([]byte) error { return nil } 289 290 func (c TestSpiDevice) ReadCommandData(w, r []byte) error { 291 manName, _ := hex.DecodeString("ff0000a544657874657220496e6475737472696573000000") 292 boardName, _ := hex.DecodeString("ff0000a5476f5069476f3300000000000000000000000000") 293 hwVersion, _ := hex.DecodeString("ff0000a5002dcaab") 294 fwVersion, _ := hex.DecodeString("ff0000a500000bbc") 295 serialNum, _ := hex.DecodeString("ff0000a5e0180a54514e343732202020ff112137") 296 fiveVoltVoltage, _ := hex.DecodeString("ff0000a513b7") 297 batteryVoltage, _ := hex.DecodeString("ff0000a53c33") 298 negMotorEncoder, _ := hex.DecodeString("ff0000a5ffffff00") 299 motorEncoder, _ := hex.DecodeString("ff0000a5000000ff") 300 motorStatus, _ := hex.DecodeString("ff0000a50080000000000000") 301 analogValue, _ := hex.DecodeString("ff0000a50000a0") 302 buttonPush, _ := hex.DecodeString("ff0000a50001") 303 switch w[1] { 304 case 1: 305 copy(r, manName) 306 return nil 307 case 2: 308 copy(r, boardName) 309 return nil 310 case 3: 311 copy(r, hwVersion) 312 return nil 313 case 4: 314 copy(r, fwVersion) 315 return nil 316 case 5: 317 copy(r, serialNum) 318 return nil 319 case 7: 320 copy(r, fiveVoltVoltage) 321 return nil 322 case 8: 323 copy(r, batteryVoltage) 324 return nil 325 case 17: 326 if negativeEncoder { 327 copy(r, negMotorEncoder) 328 return nil 329 } 330 copy(r, motorEncoder) 331 return nil 332 case 19: 333 copy(r, motorStatus) 334 return nil 335 case 29: 336 copy(r, buttonPush) 337 return nil 338 case 36: 339 copy(r, analogValue) 340 return nil 341 } 342 return nil 343 }