Operating systems and concurrency assignment
You are required to develop software that uses the uC/OS-II operating system to implement a security briefcase alarm on a LPC-2378STK ARM board. Your software should be written in standard C and should run on an ARM board in PB S2. You should imagine that an LPC2378-STK board could be fixed to a briefcase to act as a security device. The security mechanism is enabled by pressing BUT_1. When enabled, if the device detects any motion of the briefcase, it requires a user to enter a 4 digit security code within some predefined time interval (known as the ALARM_INTERVAL), starting when the motion was first detected. A count of the time remaining should be shown on the display, as should the ALARM_INTERVAL. If the correct code is entered in time, the security mechanism is disabled and the briefcase can be opened by pressing BUT_2 (which is also used to lock the briefcase). If the correct code is not entered in time, the alarm is raised. A typical device, currently available for sale, makes a loud (100 dB) noise as its alarm. In order to avoid disruption to others in the lab, your device should simply flash the LEDs and display an appropriate status message instead. The alarm can be turned off only by entering the correct 4 digit code, following which the security mechanism is disabled. The user should use the joystick to enter the security code: LEFT and RIGHT should be used to cycle round the digits on the display; UP and DOWN should be used to increment/decrement the selected digit. The value of the ALARM_INTERVAL can be adjusted only when the security mechanism is disabled. It should be possible to use the red knob (potentiometer) to select an integer value between 10 and 120 seconds. A typical display may look like this You should begin your solution by downloading the file workspace.zip into a suitable directory. Unzip the file and open the workspace workspace.eww. Your software should make use of uC/OS-II and should comprise at least the following tasks: • Three input tasks: 1. buttons and joystick task 2. potentiometer task 3. accelerometer task • Two output tasks: 1. LCD task 2. LED task Each task should be concerned with a single well-defined aspect of the overall program functionality, e.g. the potentiometer task should just read the potentiometer value and adjust the ALARM_INTERVAL, if allowed to do so; it should not manipulate the LCD or the LED directly. That is the job of the output tasks. You MUST use a circular buffer protected by semaphores for all communication between tasks.