Merge remote-tracking branch 'upstream/develop' into pts-settings
This commit is contained in:
		
						commit
						5a0cf8e348
					
				| @ -1,5 +1,5 @@ | ||||
| cmake_minimum_required(VERSION 3.10) | ||||
| project(pinetime VERSION 1.6.0 LANGUAGES C CXX ASM) | ||||
| project(pinetime VERSION 1.7.0 LANGUAGES C CXX ASM) | ||||
| 
 | ||||
| set(CMAKE_C_STANDARD 99) | ||||
| set(CMAKE_CXX_STANDARD 14) | ||||
|  | ||||
| @ -40,7 +40,9 @@ namespace Pinetime { | ||||
|         Controllers::AlarmController& alarmController; | ||||
| 
 | ||||
|         lv_obj_t *time, *btnEnable, *txtEnable, *btnMinutesUp, *btnMinutesDown, *btnHoursUp, *btnHoursDown, *txtMinUp, *txtMinDown, | ||||
|           *txtHrUp, *txtHrDown, *btnRecur, *txtRecur, *btnMessage, *txtMessage, *btnInfo, *txtInfo; | ||||
|           *txtHrUp, *txtHrDown, *btnRecur, *txtRecur, *btnInfo, *txtInfo; | ||||
|         lv_obj_t* txtMessage = nullptr; | ||||
|         lv_obj_t* btnMessage = nullptr; | ||||
| 
 | ||||
|         enum class EnableButtonState { On, Off, Alerting }; | ||||
|         void SetEnableButtonState(); | ||||
|  | ||||
| @ -32,6 +32,18 @@ bool Cst816S::Init() { | ||||
|   twiMaster.Read(twiAddress, 0xa7, &dummy, 1); | ||||
|   vTaskDelay(5); | ||||
| 
 | ||||
|   static constexpr uint8_t maxRetries = 3; | ||||
|   bool isDeviceOk; | ||||
|   uint8_t retries = 0; | ||||
|   do { | ||||
|     isDeviceOk = CheckDeviceIds(); | ||||
|     retries++; | ||||
|   } while (!isDeviceOk && retries < maxRetries); | ||||
| 
 | ||||
|   if (!isDeviceOk) { | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   /*
 | ||||
|   [2] EnConLR - Continuous operation can slide around | ||||
|   [1] EnConUD - Slide up and down to enable continuous operation | ||||
| @ -50,21 +62,7 @@ bool Cst816S::Init() { | ||||
|   static constexpr uint8_t irqCtl = 0b01110000; | ||||
|   twiMaster.Write(twiAddress, 0xFA, &irqCtl, 1); | ||||
| 
 | ||||
|   // There's mixed information about which register contains which information
 | ||||
|   if (twiMaster.Read(twiAddress, 0xA7, &chipId, 1) == TwiMaster::ErrorCodes::TransactionFailed) { | ||||
|     chipId = 0xFF; | ||||
|     return false; | ||||
|   } | ||||
|   if (twiMaster.Read(twiAddress, 0xA8, &vendorId, 1) == TwiMaster::ErrorCodes::TransactionFailed) { | ||||
|     vendorId = 0xFF; | ||||
|     return false; | ||||
|   } | ||||
|   if (twiMaster.Read(twiAddress, 0xA9, &fwVersion, 1) == TwiMaster::ErrorCodes::TransactionFailed) { | ||||
|     fwVersion = 0xFF; | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   return chipId == 0xb4 && vendorId == 0 && fwVersion == 1; | ||||
|   return true; | ||||
| } | ||||
| 
 | ||||
| Cst816S::TouchInfos Cst816S::GetTouchInfo() { | ||||
| @ -79,18 +77,33 @@ Cst816S::TouchInfos Cst816S::GetTouchInfo() { | ||||
| 
 | ||||
|   // This can only be 0 or 1
 | ||||
|   uint8_t nbTouchPoints = touchData[touchPointNumIndex] & 0x0f; | ||||
| 
 | ||||
|   uint8_t xHigh = touchData[touchXHighIndex] & 0x0f; | ||||
|   uint8_t xLow = touchData[touchXLowIndex]; | ||||
|   info.x = (xHigh << 8) | xLow; | ||||
| 
 | ||||
|   uint16_t x = (xHigh << 8) | xLow; | ||||
|   uint8_t yHigh = touchData[touchYHighIndex] & 0x0f; | ||||
|   uint8_t yLow = touchData[touchYLowIndex]; | ||||
|   info.y = (yHigh << 8) | yLow; | ||||
|   uint16_t y = (yHigh << 8) | yLow; | ||||
|   Gestures gesture = static_cast<Gestures>(touchData[gestureIndex]); | ||||
| 
 | ||||
|   // Validity check
 | ||||
|   if(x >= maxX || y >= maxY || | ||||
|       (gesture != Gestures::None && | ||||
|        gesture != Gestures::SlideDown && | ||||
|        gesture != Gestures::SlideUp && | ||||
|        gesture != Gestures::SlideLeft && | ||||
|        gesture != Gestures::SlideRight && | ||||
|        gesture != Gestures::SingleTap && | ||||
|        gesture != Gestures::DoubleTap && | ||||
|        gesture != Gestures::LongPress)) { | ||||
|     info.isValid = false; | ||||
|     return info; | ||||
|   } | ||||
| 
 | ||||
|   info.x = x; | ||||
|   info.y = y; | ||||
|   info.touching = (nbTouchPoints > 0); | ||||
|   info.gesture = static_cast<Gestures>(touchData[gestureIndex]); | ||||
| 
 | ||||
|   info.gesture = gesture; | ||||
|   info.isValid = true; | ||||
|   return info; | ||||
| } | ||||
| 
 | ||||
| @ -108,3 +121,21 @@ void Cst816S::Wakeup() { | ||||
|   Init(); | ||||
|   NRF_LOG_INFO("[TOUCHPANEL] Wakeup"); | ||||
| } | ||||
| 
 | ||||
| bool Cst816S::CheckDeviceIds() { | ||||
|   // There's mixed information about which register contains which information
 | ||||
|   if (twiMaster.Read(twiAddress, 0xA7, &chipId, 1) == TwiMaster::ErrorCodes::TransactionFailed) { | ||||
|     chipId = 0xFF; | ||||
|     return false; | ||||
|   } | ||||
|   if (twiMaster.Read(twiAddress, 0xA8, &vendorId, 1) == TwiMaster::ErrorCodes::TransactionFailed) { | ||||
|     vendorId = 0xFF; | ||||
|     return false; | ||||
|   } | ||||
|   if (twiMaster.Read(twiAddress, 0xA9, &fwVersion, 1) == TwiMaster::ErrorCodes::TransactionFailed) { | ||||
|     fwVersion = 0xFF; | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   return chipId == 0xb4 && vendorId == 0 && fwVersion == 1; | ||||
| } | ||||
|  | ||||
| @ -21,7 +21,7 @@ namespace Pinetime { | ||||
|         uint16_t y = 0; | ||||
|         Gestures gesture = Gestures::None; | ||||
|         bool touching = false; | ||||
|         bool isValid = true; | ||||
|         bool isValid = false; | ||||
|       }; | ||||
| 
 | ||||
|       Cst816S(TwiMaster& twiMaster, uint8_t twiAddress); | ||||
| @ -45,6 +45,8 @@ namespace Pinetime { | ||||
|         return fwVersion; | ||||
|       } | ||||
|     private: | ||||
|       bool CheckDeviceIds(); | ||||
| 
 | ||||
|       // Unused/Unavailable commented out
 | ||||
|       static constexpr uint8_t gestureIndex = 1; | ||||
|       static constexpr uint8_t touchPointNumIndex = 2; | ||||
| @ -58,6 +60,9 @@ namespace Pinetime { | ||||
|       //static constexpr uint8_t touchXYIndex = 7;
 | ||||
|       //static constexpr uint8_t touchMiscIndex = 8;
 | ||||
| 
 | ||||
|       static constexpr uint8_t maxX = 240; | ||||
|       static constexpr uint8_t maxY = 240; | ||||
| 
 | ||||
|       TwiMaster& twiMaster; | ||||
|       uint8_t twiAddress; | ||||
| 
 | ||||
|  | ||||
| @ -144,9 +144,15 @@ void SystemTask::Work() { | ||||
|   lcd.Init(); | ||||
| 
 | ||||
|   twiMaster.Init(); | ||||
|   /*
 | ||||
|    * TODO We disable this warning message until we ensure it won't be displayed | ||||
|    * on legitimate PineTime equipped with a compatible touch controller. | ||||
|    * (some users reported false positive). See https://github.com/InfiniTimeOrg/InfiniTime/issues/763
 | ||||
|   if (!touchPanel.Init()) { | ||||
|     bootError = BootErrors::TouchController; | ||||
|   } | ||||
|    */ | ||||
|   touchPanel.Init(); | ||||
|   dateTimeController.Register(this); | ||||
|   batteryController.Register(this); | ||||
|   motorController.Init(); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user