Merging.
This commit is contained in:
		| @@ -86,13 +86,13 @@ func (p *atPort) IsConnected() bool { | ||||
| // Low level write/read function | ||||
| func (p *atPort) makeReq(msg string) (string, error) { | ||||
| 	// Write | ||||
| 	p.port.ResetInputBuffer() | ||||
| 	if _, err := p.port.Write([]byte(msg)); err != nil { | ||||
| 		return "", fmt.Errorf("serial port write: %w", err) | ||||
| 	} | ||||
| 	time.Sleep(time.Millisecond) | ||||
| 	// Read | ||||
| 	readLen, err := p.port.Read(p.inputBuf) | ||||
| 	p.logger.Println(msg, "RAWREAD:", string(p.inputBuf[:readLen])) | ||||
| 	// p.logger.Println(msg, "\x1b[38;2;150;150;150mRAWREAD:", string(p.inputBuf[:readLen]), "\x1b[38;2;255;255;255m") | ||||
| 	if err != nil { | ||||
| 		return "", fmt.Errorf("port read: %w", err) | ||||
| 	} | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import ( | ||||
| ) | ||||
|  | ||||
| type gpioPin struct { | ||||
| 	logger *log.Logger | ||||
| 	Logger *log.Logger | ||||
| 	Pin    gpio.Pin | ||||
| } | ||||
|  | ||||
| @@ -18,22 +18,22 @@ func (p gpioPin) Init() error { | ||||
|  | ||||
| func (p gpioPin) sendOnOffSignal() { | ||||
| 	p.Pin.Output() | ||||
| 	p.logger.Println("Power on 0/3 + 100ms") | ||||
| 	p.Logger.Println("Power on 0/3 + 100ms") | ||||
| 	p.Pin.Low() | ||||
| 	p.Pin.Toggle() | ||||
| 	time.Sleep(100 * time.Millisecond) | ||||
|  | ||||
| 	p.logger.Println("Power on 1/3 + 3s") | ||||
| 	p.Logger.Println("Power on 1/3 + 3s") | ||||
| 	p.Pin.High() | ||||
| 	p.Pin.Toggle() | ||||
| 	time.Sleep(3 * time.Second) | ||||
|  | ||||
| 	p.logger.Println("Power on 2/3 + 30s") | ||||
| 	p.Logger.Println("Power on 2/3 + 30s") | ||||
| 	p.Pin.Low() | ||||
| 	p.Pin.Toggle() | ||||
| 	time.Sleep(30 * time.Second) | ||||
|  | ||||
| 	p.logger.Println("Power on 3/3") | ||||
| 	p.Logger.Println("Power on 3/3") | ||||
| } | ||||
|  | ||||
| func (p gpioPin) PowerOn() { | ||||
|   | ||||
| @@ -50,8 +50,10 @@ func (gps *GpsData) decode(str string) error { | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("parse longitude: %w", err) | ||||
| 	} | ||||
| 	newGpsInfo.Latitude /= 100 | ||||
| 	newGpsInfo.Longitude /= 100 | ||||
| 	newGpsInfo.LatitudeIndicator = strs[1] | ||||
| 	newGpsInfo.LatitudeIndicator = strs[3] | ||||
| 	newGpsInfo.LongitudeIndicator = strs[3] | ||||
| 	newGpsInfo.Date = strs[4] | ||||
| 	newGpsInfo.Time = strs[5] | ||||
| 	newGpsInfo.Altitude, err = strconv.ParseFloat(strs[6], 64) | ||||
|   | ||||
| @@ -47,18 +47,18 @@ func New(logger *log.Logger) Modem { | ||||
| 	return &modem{ | ||||
| 		logger:         logger, | ||||
| 		baudrate:       115200, | ||||
| 		onOffPin:       gpioPin{Pin: 6}, | ||||
| 		onOffPin:       gpioPin{Logger: logger, Pin: 6}, | ||||
| 		lastUpdateTime: time.Now(), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (m *modem) Init() error { | ||||
| 	// Turn module on | ||||
| 	// log.Println("=============================== Turn on module") | ||||
| 	// if err := m.onOffPin.Init(); err != nil { | ||||
| 	// 	return fmt.Errorf("gpio pin init: %w", err) | ||||
| 	// } | ||||
| 	// onOffPin.PowerOn() | ||||
| 	log.Println("=============================== Turn on module") | ||||
| 	if err := m.onOffPin.Init(); err != nil { | ||||
| 		return fmt.Errorf("gpio pin init: %w", err) | ||||
| 	} | ||||
| 	// m.onOffPin.PowerOn() | ||||
|  | ||||
| 	// Search | ||||
| 	m.logger.Println("=============================== Search") | ||||
| @@ -206,6 +206,21 @@ func (m *modem) saveGPS(path string) error { | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| func (m *modem) testConsole() { | ||||
| 	for { | ||||
| 		var inStr string | ||||
| 		fmt.Scanln(&inStr) | ||||
| 		if inStr == "exit" { | ||||
| 			return | ||||
| 		} | ||||
| 		resp, err := m.port.Send(inStr) | ||||
| 		if err != nil { | ||||
| 			m.logger.Println("ERROR:", err.Error()) | ||||
| 		} | ||||
| 		log.Println(resp) | ||||
| 		log.Println("------------------") | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (m *modem) checkPort(portName string) (outErr error) { | ||||
| 	defer func() { | ||||
| @@ -227,16 +242,25 @@ func (m *modem) checkPort(portName string) (outErr error) { | ||||
| 	} | ||||
| 	defer m.port.Disconnect() // Do not bother about errors... | ||||
|  | ||||
| 	// Reset input | ||||
| 	if err := m.port.GetSerialPort().ResetInputBuffer(); err != nil { | ||||
| 		return fmt.Errorf("reset input buffer: %w", err) | ||||
| 	} | ||||
| 	// Reset output | ||||
| 	if err := m.port.GetSerialPort().ResetOutputBuffer(); err != nil { | ||||
| 		return fmt.Errorf("reset output buffer: %w", err) | ||||
| 	} | ||||
| 	m.port.Send("ATE0") // This shit sometimes enables echo mode... why... when... but it can | ||||
|  | ||||
| 	// Ping | ||||
| 	m.logger.Println("Ping...") | ||||
|  | ||||
| 	if err := m.ping(); err != nil { | ||||
| 		return fmt.Errorf("ping error: %w", err) | ||||
| 	} | ||||
| 	m.logger.Println("\x1b[38;2;0;255;0mOK\x1b[38;2;255;255;255m") | ||||
|  | ||||
| 	// Check model | ||||
| 	m.logger.Println("Check model...") | ||||
|  | ||||
| 	resp, err := m.port.Send("AT+CGMM") | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("get model: %w", err) | ||||
| @@ -253,7 +277,7 @@ func (m *modem) checkPort(portName string) (outErr error) { | ||||
| 	if model[:len(rightModel)] != rightModel { | ||||
| 		return fmt.Errorf("invalid modem model: %s", model) | ||||
| 	} | ||||
| 	m.logger.Println("Model right") | ||||
| 	m.logger.Println("\x1b[38;2;0;255;0mOK\x1b[38;2;255;255;255m") | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| @@ -274,7 +298,7 @@ SearchLoop: | ||||
| 		m.logger.Printf("Checking port %s ...\n", p) | ||||
|  | ||||
| 		if err := m.checkPort("/dev/" + p); err != nil { | ||||
| 			m.logger.Printf("Check failed: %s\n", err.Error()) | ||||
| 			m.logger.Printf("\x1b[38;2;255;0;0mCheck failed: %s\x1b[38;2;255;255;255m\n", err.Error()) | ||||
| 			continue SearchLoop | ||||
| 		} | ||||
|  | ||||
| @@ -298,10 +322,14 @@ func (m *modem) ping() error { | ||||
|  | ||||
| func (m *modem) switchToGpsMode() error { | ||||
| 	m.logger.Println("Enabling GPS mode...") | ||||
| 	// Reset intput | ||||
| 	// Reset input | ||||
| 	if err := m.port.GetSerialPort().ResetInputBuffer(); err != nil { | ||||
| 		return fmt.Errorf("reset input buffer: %w", err) | ||||
| 	} | ||||
| 	// Reset output | ||||
| 	if err := m.port.GetSerialPort().ResetOutputBuffer(); err != nil { | ||||
| 		return fmt.Errorf("reset output buffer: %w", err) | ||||
| 	} | ||||
|  | ||||
| 	// Check gps mode status | ||||
| 	resp, err := m.port.Send("AT+CGPS?") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user