CalcLoverHK 发表于 2024-10-10 22:55:08

Cahute:卡西欧计算器的通信和文件格式管理工具

本帖最后由 CalcLoverHK 于 2024-11-6 01:46 编辑

Cahute是一系列命令行工具和函数库,处理卡西欧90年代至今计算器相关的串行及USB通信协议和文件格式,由Cakeisalie5基于其前作libp7和p7utils开发。

目前最新版本(0.5)的Cahute能做到:

[*]与fx-9860G系列计算器双向传输文件
[*]共享fx-9860G及fx-CG系列计算器画面

此专案遵循CeCILL 2.1开源协议。

【请在右上角输入要前往的楼层】
1楼:总览
2楼:安装流程
3楼:p7指令概述
4楼:p7screen指令概述
5楼:p7os指令概述
6楼:快速教程:取得计算器信息
7楼:快速教程:传送文件至计算器存储
8楼:快速教程:从计算器存储取得文件
9楼:快速教程:显示计算器画面
10楼:进阶教程:使用p7os刷写9750/9860系统

计划中的内容:
[*]日志记录等级概述

相关链接
官方网站 【预览版】
软件仓库
问题报告指南
成为贡献者

CalcLoverHK 发表于 2024-10-10 22:55:09

安装流程

本帖最后由 CalcLoverHK 于 2024-11-5 15:57 编辑

Windows/WSL 2
目前Cahute没有官方Windows安装途径,但是你可以在Linux上使用MinGW跨平台编译Windows可执行文件:
https://next.cahuteproject.org/guides/build.html#mingw-w64-windows-xp-and-above-from-linux-distributions

WSL 2原生不支持USB通信,但是可以安装usbipd-win软件以解决这个问题。
由于该项目托管在GitHub上,考虑到此网站在国内的存取问题,本帖会提供其安装包:


微软官网为此软件写了一篇教程,本帖将围绕此文章展开:
https://learn.microsoft.com/zh-cn/windows/wsl/connect-usb#attach-a-usb-device

使用USB连接你的计算器到电脑,然后以管理员模式打开Powershell(命令提示符也可以)并输入以下指令:
usbipd list显示的列表应包含以下组合之一:07cf:6101 CESG502
07cf:6102 Casio MassStorage Device
07cf:6103 USB Mass Storage Device07cf为卡西欧的厂商识别码,而冒号后面的4位数是其产品识别码。
记下计算器的BUSID,并在WSL实例运行时执行以下指令进行绑定(仅此部分需要管理员权限):
usbipd bind -b <BUSID>最后,同样是在实例运行时执行以下指令将计算器USB设备附加到WSL主机:
usbipd attach -w -b <BUSID>值得留意的是断开再重新连接时需要重复上述步骤。要想始终连接到WSL实例,请在此指令后面加上`-a`选项:
usbipd attach -w -b <BUSID> -a
macOS / OS X
苹果电脑用户可以使用Homebrew安装Cahute。
安装Homebrew后,请先断开所有计算器与电脑的通信再安装Cahute,否则可能会导致安装失败:
brew install cahute
Arch Linux / Manjaro Linux
Arch用户软件仓库(AUR)提供Cahute软件包,根据你喜好的AUR助手安装Cahute,例如paru或pikaur:
paru -S cahute
pikaur -S cahute安装Cahute后,请将自己的用户名加入到uucp群组,以允许Linux与计算器通信:
sudo usermod -a -G uucp <你的用户名>
GiteaPC
GiteaPC是一个Python程序工具,实现Planète Casio(卡西欧星球)开发者程序和函数库的自动化安装和更新。
以下指令将安装稳定版本分支(截至2024/10/10,最新稳定版本为0.5):
giteapc install cake/[email protected]如果你想安装开发版本,只需将`@0.5`替换为`@develop`即可。
Cahute的默认日志记录等级为`warning`,即只显示错误信息。想要显示调试信息(即`info`等级),请加上`:contributor`。
由于GiteaPC将udev规则安装在.local目录下,如果你想在整个系统中都能使用Cahute,请移动该规则配置文件到系统目录:
sudo mv ~/.local/lib/udev/rules.d/*.rules /etc/udev/rules.d/然后手动重启udev管理器:
sudo udevadm control --reload将自己的用户名加入到uucp群组,然后重启WSL会话:
sudo usermod -a -G uucp <你的用户名>
自行编译
出于篇幅考虑,本帖只涵盖适用于绝大部分Linux发行版的手动编译过程。其他方法请前往Cahute官方网站查阅:
https://next.cahuteproject.org/guides/build.html

Cahute的依赖项为:

[*]CMake(3.16+)
[*]Python(3.8+)及toml模块
[*]GNU Make及pkg-config
[*]SDL(2.0+)
[*]libusb

选择以下两种途径之一下载Cahute源代码:
curl -o cahute-0.5.tar.gz https://ftp.cahuteproject.org/releases/cahute-0.5.tar.gz
tar xvaf cahute-0.5.tar.gzgit clone https://gitlab.com/cahuteproject/cahute.git cahute-0.5然后进行系统升级并安装所有依赖项:

[*]Debian系发行版
sudo apt-get update
sudo apt-get install cmake python3 python3-toml libusb-1.0-0-dev libsdl2-dev
[*]Arch Linux系发行版
sudo pacman -Sy cmake python python-toml libusb sdl2
[*]Void Linux系发行版
xbps-install cmake python3 python3-toml libusb-devel sdl2-devel在源代码压缩包的父目录下使用CMake编译Cahute:
cmake -B build -S cahute-0.5 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release如果你想直接安装到系统上,请使用以下指令:
sudo cmake --install build --strip或者安装到指定文件夹里:
DESTDIR=./<文件夹位置> cmake --install build --strip安装Cahute时CMake会自动配置udev规则,这意味着你需要手动重启udev管理器:
sudo udevadm control --reload将自己的用户名加入到uucp群组,然后重启WSL会话:
sudo usermod -a -G uucp <你的用户名>

CalcLoverHK 发表于 2024-10-10 23:00:41

p7指令概述

本帖最后由 CalcLoverHK 于 2024-10-16 02:06 编辑

完整版(英文):https://next.cahuteproject.org/cli/p7.html

p7命令用于与计算器存储器的交互。

通用参数
适用于所有子命令的选项:

[*]-h, --help:显示p7子命令帮助页面。
[*]-v, --version:显示版本信息及许可证。
[*]-l, --log <等级>:设置日志记录等级。(info,warning,error,fatal,none)
参考此章节以知悉各日志记录等级的用途:
https://next.cahuteproject.org/topics/logging.html

串行相关选项:

[*]--com <串行设备路径>:指定串行设备的位置。如忽略此选项,p7会选取USB模式下的计算器。
[*]--use <波特率><奇偶校验位><停止位元数>:使用串行参数。
<波特率>:通常为9600的倍数。默认为9600。
<奇偶校验位>:O(奇数),E(偶数),N(禁用)
<停止位元数>:1/2
如果没有指定--com选项,此选项将被忽略。
[*]--set <波特率><奇偶校验位><停止位元数>:设置计算器的串行参数。
如果没有指定--com选项,此选项将被忽略。
[*]--reset:重置串行参数至9600N2。
[*]--no-init:当开启连接时禁用起始握手信号。多用于连续执行p7指令。
[*]--no-exit:当关闭连接时禁用终止握手信号。多用于连续执行p7指令。

list-device子命令
p7 list-device显示可用串行设备的路径。
例子:
$ p7 list-devices
Available devices:

- /dev/ttyUSB1
- /dev/ttyUSB2
info子命令
p7 info显示已连接计算器的软硬件信息。

idle子命令
p7 idle不进行任何p7子命令用途,只用于连续执行命令时初始化、终止或更新串行参数。

send子命令
p7 send [选项...] <本地文件位置>传送在当前目录下的文件到计算器上。
可用选项:

[*]-#:显示进度条。
[*]-f, --force:如果计算器有相同名字的文件,强制覆写该文件。默认情况下计算器会提示是否进行覆写操作。
[*]-o, --output <文件名>:指定文件在计算器上的文件名。默认为本地文件位置的基本名称。
[*]-d, --directory <文件夹>:指定计算器的目的地文件夹。默认为计算器的根目录。
[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)

get子命令
p7 get [选项...] <文件名>取得计算器上的文件。
可用选项:

[*]-#:显示进度条。
[*]-o, --output <文件名>:指定文件在电脑上的文件名。如果当前目录上有相同名字的文件,该文件将会被覆写。默认为计算器文件位置的文件名。
[*]-d, --directory <文件夹>:指定计算器文件所在的文件夹。默认为计算器的根目录。
[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)

copy子命令
p7 copy [选项...] <文件名> <目的地文件名>复制计算器上的文件到其他位置。
可用选项:

[*]-d, --directory <文件夹>:指定文件名所在的文件夹。默认为计算器的根目录。
[*]-t, --to <目的地文件夹>:指定目的地文件名所在的文件夹。默认为计算器的根目录。
[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)

delete子命令
p7 delete [选项...] <文件名>删除计算器上的文件。
可用选项:

[*]-d, --directory <文件夹>:指定计算器文件所在的文件夹。默认为计算器的根目录。
[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)

list子命令
p7 list [选项...]列出计算器上的文件。
可用选项:

[*]-d, --directory:指定计算器的文件夹。默认为计算器的根目录。
[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)

reset子命令
p7 reset [选项...]初始化计算器的储存。
可用选项:

[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)

optimize子命令
p7 optimize [选项...]优化计算器的储存。
可用选项:

[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)

CalcLoverHK 发表于 2024-10-10 23:01:16

p7screen指令概述

本帖最后由 CalcLoverHK 于 2024-10-16 02:00 编辑

完整版(英文):https://next.cahuteproject.org/cli/p7screen.html

p7screen指令用于投影计算器画面至电脑。
p7screen <选项...>可用选项:

[*]-h, --help:显示p7screen指令帮助页面。
[*]-v, --version:显示版本信息及许可证。
[*]-l, --log <等级>:设置日志记录等级。(info,warning,error,fatal,none)
参考此章节以知悉各日志记录等级的用途:
https://next.cahuteproject.org/topics/logging.html

[*]--com:指定串行设备的位置。默认情况下p7会选取USB模式下的计算器。
[*]--use:设置串行参数。格式为<波特率><奇偶校验位><停止位元数>:
<波特率>:通常为9600的倍数。默认为9600。
<奇偶校验位>:O(奇数),E(偶数),N(禁用)
<停止位元数>:1/2
如果没有指定--com选项,此选项将被忽略。
[*]--zoom:设置放大倍率,范围为1-16。

CalcLoverHK 发表于 2024-10-10 23:01:52

p7os指令概述

本帖最后由 CalcLoverHK 于 2024-11-5 15:10 编辑

警告:此部分涉及非官方系统固件刷写,可能会导致你的计算器变砖和失去保修。
本人及原作者对于任何损失概不负责!
完整版(英文):https://next.cahuteproject.org/cli/p7os.html

p7os用于与计算器系统的交互和升级系统。

通用参数

[*]-h, --help:显示p7os指令帮助页面。
[*]-v, --version:显示版本信息及许可证。
[*]-l, --log <等级>:设置日志记录等级。(info,warning,error,fatal,none)
参考此章节以知悉各日志记录等级的用途:
https://next.cahuteproject.org/topics/logging.html
[*]-#:显示进度条。
[*]--no-prepare:不要上载Update.EXE,取决于该升级程序是否已经上载并在计算器上运行。
[*]-u, --uexe:使用自定义刷写程序。
如果未指定--no-prepare,必须要指定此选项。

prepare-only子命令
p7os prepare-only上载Update.EXE至计算器,然后不进行任何操作。

flash子命令
p7os flash [--erase-flash] <os.bin>刷写系统固件。
可用选项:

[*]--erase-flash:清除计算器存储。

get子命令
p7os get [-o <os.bin>]备份系统固件(包括所有用户数据和插件)。
可用选项:

[*]-o, --output <文件名>:指定备份固件的名称。

CalcLoverHK 发表于 2024-10-15 18:29:47

快速教程:取得计算器信息

本帖最后由 CalcLoverHK 于 2024-10-16 02:52 编辑

如果你使用USB...

[*]使用mini-B USB电缆连接你的计算器。
[*]在计算器的对话框上选择DataTrans。
[*]执行p7 info指令。

如果你使用串行...

[*]使用SB-88或相容电缆连接你的计算器。
[*]将计算器的电缆类型设置为3PIN,并进入接收模式。
[*]执行p7 list-devices指令找出你的计算器所在的串行设备位置。
[*]执行p7 --com <串行设备位置> info指令。

执行指令后,你应该能得到类似于以下的信息:
Warning: Preprogrammed ROM information looks wiped out!
Warning: Username is not set.
CPU ID (probably out of date): RENESAS SH733701
Environnement ID: Gy363000
Product ID: kpQMLCpq
ROM capacity: 4096KiB
RAM capacity: 128KiB
Bootcode version: 00.10.0010
Bootcode size: 64KiB
OS version: 01.10.0000
OS offset: 0x00010000
OS size: 2496KiB

CalcLoverHK 发表于 2024-10-16 02:35:02

快速教程:传送文件至计算器存储

本帖最后由 CalcLoverHK 于 2024-10-16 14:12 编辑

此教程假设你需要传送一个名为MYADDIN.G1A的文件。

如果你使用USB...

[*]使用mini-B USB电缆连接你的计算器。
[*]在计算器的对话框上选择DataTrans。
[*]执行p7 send MYADDIN.G1A指令将此文件传送至计算器。

如果你使用串行...

[*]使用SB-88或相容电缆连接你的计算器。
[*]将计算器的电缆类型设置为3PIN,并进入接收模式。
[*]执行p7 list-devices指令找出你的计算器所在的串行设备位置。
[*]执行p7 --com <串行设备位置> send MYADDIN.G1A指令将此文件传送至计算器。

如果计算器上有相同名字的文件,p7会询问你是否覆盖此文件。

[*]输入y确定覆盖操作,或;
[*]输入n取消传送文件。

OS 1.x的fx-9860G Slim接上USB电缆时不会显示对话框,而是根据当前Capture设置决定传送模式。要传送文件,请先将该设置设为Memory。

CalcLoverHK 发表于 2024-10-16 11:36:56

快速教程:从计算器存储取得文件

本帖最后由 CalcLoverHK 于 2024-10-16 14:12 编辑

此教程假设你需要从计算器提取一个名为MYADDIN.G1A的文件。

如果你使用USB...

[*]使用mini-B USB电缆连接你的计算器。
[*]在计算器的对话框上选择DataTrans。
[*]执行p7 get MYADDIN.G1A指令将此文件传送至计算器。

如果你使用串行...

[*]使用SB-88或相容电缆连接你的计算器。
[*]将计算器的电缆类型设置为3PIN,并进入接收模式。
[*]执行p7 list-devices指令找出你的计算器所在的串行设备位置。
[*]执行p7 --com <串行设备位置> get MYADDIN.G1A指令将此文件传送至计算器。

OS 1.x的fx-9860G Slim接上USB电缆时不会显示对话框,而是根据当前Capture设置决定传送模式。要提取文件,请先将该设置设为Memory。

CalcLoverHK 发表于 2024-10-16 11:48:57

快速教程:显示计算器画面

本帖最后由 CalcLoverHK 于 2024-11-3 02:19 编辑

如果你使用USB...

[*]使用mini-B USB电缆连接你的计算器。
[*]在计算器的对话框上选择Projector(9860系列)/ScreenR(XP)(CG系列)。
[*]执行p7screen指令。

如果你使用串行...

[*]使用SB-88或相容电缆连接你的计算器。
[*]将计算器的电缆类型设置为3PIN,并将Capture设置设为Projector。
[*]执行p7 list-devices指令找出你的计算器所在的串行设备位置。
[*]执行p7screen --com <串行设备位置>指令。

OS 1.x的fx-9860G Slim接上USB电缆时不会显示对话框,而是根据当前Capture设置决定传送模式。要显示此计算器的画面,请先将该设置设为OHP。

fx-CG系列计算器上有3种用于传送画面的通信协议,分别为:ScreenRecv,ScreenR(XP)及Projector。经测试,ScreenR(XP)的性能最佳,其次为ScreenRecv和Projector。

前往4楼查阅更多p7screen指令用途。

CalcLoverHK 发表于 2024-11-5 15:47:39

进阶教程:使用p7os刷写9750/9860系统

本帖最后由 CalcLoverHK 于 2024-11-6 01:15 编辑

警告:此部分涉及非官方系统固件刷写,可能会导致你的计算器变砖和失去保修。
本人及原作者对于任何损失概不负责!

本教程将逐步示范如何使用p7os刷写系统。

前期知识
本教程将假设你已阅读本论坛的系统升级精华帖:
https://www.cncalc.org/thread-8335-1-1.html
https://www.cncalc.org/thread-11907-1-1.html

p7os的升级原理源自fxRemote,但不需要下载fxRemote刷机工具(仅支持Windows),故能在Linux和macOS平台执行,而且也可以选择不手动调出OS Error画面。

检查计算器的CPU信息
使用USB或串行电缆连接你的计算器,然后执行p7 info指令。你应得到类似于下面的信息:
Warning: Preprogrammed ROM information looks wiped out!
Warning: Username is not set.
CPU ID (probably out of date): RENESAS SH733701
Environnement ID: Gy363000
...CPU ID便是计算器的CPU信息。SH7337/SH7355是SH3处理器,所以仅能刷写SH3的系统版本,而SH7305则是SH4A。

备份系统
执行p7os get备份当前系统,具体用法请参考5楼。

下载系统固件
目前SH3机型的最佳系统版本为02.04.0200,而SH4A机型为02.05.0201。这俩版本的功能最全,其他版本则为了符合国际考试的要求而作出功能上的限制,比如说向量和单位转换。

请注意,由于fx-9860G Slim的键盘布局与其他机型不同,你需要刷写2.04固件的键位修复版才能正常使用。
本帖提供的固件来源于Planète Casio和Ti-Planet。

SH3机型(Slim除外):
Slim:
SH4A机型:

刷写系统
有两种途径:

[*]进入传输模式,然后执行p7os flash <os.bin>。
第一次执行的时候,计算器将会自动进入OS Error画面,这时候请再次执行刚才的指令。
[*]手动进入OS Error画面,具体方法请参照精华帖。SH4A机型用户也可以参考这个教程:
https://www.cncalc.org/forum.php?mod=viewthread&tid=24718
连接你的计算器,然后执行p7os flash <os.bin>。
画面显示刷写完成后,按计算器后面的P按钮重启计算器。
系统稍后会提示是否继续存储优化或初始化(实际上无论选择哪个选项都会初始化整个存储)。

至此大功告成。
页: [1]
查看完整版本: Cahute:卡西欧计算器的通信和文件格式管理工具